> > Concerning the shoutout test, simply adding a
> > SetTextBuf(input,10000);
> > (or even higher) before the while loop should speed it up significantly.

> I'm also going to try this with my CPU-WARS email I sent to the mailing list

// TEST 5
function StrLoadFile_test5(const FileName: string): string;
var
  F: text;
  c: char;
  str1, Line: string;
  Buf : Array[1..100000] of byte;
begin
  result:= ''; //safety
  str1:= '';
  if FileExists(FileName) = false then
    exit;
  Assign(F, FileName);   //open file
  Reset(F);
  SetTextBuf(F, Buf);
  while not Eof(F) do
  begin
    Read(F, C);
    result:= result + C;
  end;
  close(F); //close file
end;

---------------------------------------------------------
Welcome to the CPU war for StrLoadFile.. Please wait...

test 1 execution time: 9357464  <-- char by char
test 2 execution time: 257074   <-- my blockread
test 3 execution time: 265960   <-- my other blockread
test 4 execution time: 2666055  <-- classes stringlist
test 5 execution time: 9133218  <-- char w/buffer

Done.
Press <enter> to exit
--------------------------------------------------------

In this case, the 100,000 buffer helped a little, but not too significant.

I think stringlist.loadfile should use block reading rather than the overhead of
using streams. We've got way too much overhead with stringlists using classes 
on top
of classes on top of classes. Although the current stringlist.loadfile is much 
faster
than char by char, block reading still beats it hands down.

Now as for Delphi's stringlist.loadfile and stringlist.text, I will have to do 
some
tests and see.

_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to