
18.10.2009, 10:49
|
|
Познавший АНТИЧАТ
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
тут дело не в потоках, а в скорости считывания с винта + правильности алгоритма считывания строк.
Простой пример из С++
функций
Код:
ULONG CountLinesInFile(char* name)
{
FILE* file;
ULONG ret = 0;
char buf[64];
file = fopen(name, "rt");
if (file)
{
while (!feof(file))
{
if (fgets(buf, 64, file))
{
ret++;
}
}
fclose(file);
}
return ret;
}
пересчитываем спамбазу на 1,7 лямов мыл примерно за 2-3 секунды.
Если адаптировать для поиска #10 символов в свободно считанных данных, то можно и быстрее ускорить.
Читать в потоках не советую потому что из-за синхронизации(которую придется тебе делать) ты потеряешь в скорости.
По этому самый лучшый выход такой:
Код:
var
buf:array[0..1024*64-1]; //типа 64 кила буфер
len:dword; // кол-во считанных данных
h:dword;
cnt : dword;
x :dword;
begin
h := CreateFile(....);
if h <> $FFFFFFFF then
begin
cnt := 0;
while true do
begin
if ReadFile(h,...., len) then
begin
for x := 0 to len-1 do if buf[x] = #10 then inc(cnt);
end else break;
if len < 1 then break;
end;
CloseHandle(h)
end;
end;
после этого cnt будет = кол-ву строк
Последний раз редактировалось slesh; 18.10.2009 в 10:56..
|
|
|