![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Худшая скорость копирования файлов при использовании алт. System? [Delphi, Windows]
TAHKEP © (2006-12-18 13:39:00)Пишу небольшую утилитку, обрабатывающую определённым образом большие (~1Gb) файлы. Суть очень проста -- берёться такой файл, последовательно просматривается, вносятся небольшие изменения и небольшими кусками по ~512кб пишется в новый файл.
Случайно заметил, что при использовании альтернативных библиотек System почти в два раза падает скорость работы програмы, видимо на этапе записи в файл, т.к. без записи время работы практически одинаковое. Так и должно быть? Это "расплата" за экономию 10кб?
Проверял на двух машинах под Win2k+SP4(NTFS, копирование шло с одного физ.устройства на другое) и WinXP+SP2(FAT32, копирование происходило на одном физ.устройстве) под D7 и разными версиями KOL 2.41, 2.48, 2.49
З.Ы. За KOL огромное спасибо!!! :)
ANTPro (2006-12-18 19:10:00) [1]> [13] TAHKEP (18.12.06 18:22)
Странно это все...
Минимально компилируемый код в студию...(Лучше в архиве на slil.ru или еще куда)
ЗЫЖ Времени почти нет (ABBYY Screenshot Reader переписываю :)
TAHKEP (2006-12-18 18:22:00) [2]
> А с FastMM4 ? И UseDelphiMemoryManager?
Про fastMM4 пока ничего не знаю, а UseDelphiMemoryManager пока даёт ошибку, причём размер .exe при его использовании у меня получается всего на 2-3 кб меньше чем с использованием стандартного System.
> Это для варианта: А?
Во всех трёх случаях
ANTPro (2006-12-18 17:58:00) [3]> [10] TAHKEP (18.12.06 17:45)
> Ресурсов проца жрёться не очень много -- около 40-50%, т.е.
> проц "не захлёбывается" точно.
Это для варианта: А?
ANTPro (2006-12-18 17:57:00) [4]> [10] TAHKEP (18.12.06 17:45)
> б) с записью при подключении стандартных System ~ 4 минуты
> в) С записью при использовании модифицированных System ~
> 9 минут
А с FastMM4 ? И UseDelphiMemoryManager?
TAHKEP (2006-12-18 17:45:00) [5]>ANTPro ©
> Тады может это тормоз всего? Как по скорости вполняется
> MD5? При копировании процессор под завязку?
>
> ЗЫЖ А что хоть делает процедура/должна делать быстро?
>
MD5 не тормоз. :) Если смотреть по времени то обработка 1Gb (Celeron 2.6, 512Мб, работа на одном физ. устройстве) занимает:
а) без записи результата на диск ~ 1 мин
б) с записью при подключении стандартных System ~ 4 минуты
в) С записью при использовании модифицированных System ~ 9 минут
Ресурсов проца жрёться не очень много -- около 40-50%, т.е. проц "не захлёбывается" точно.
ANTPro (2006-12-18 17:33:00) [6]> [8] TAHKEP (18.12.06 17:16)
> расчёт MD5 этого блока
Тады может это тормоз всего? Как по скорости вполняется MD5? При копировании процессор под завязку?
ЗЫЖ А что хоть делает процедура/должна делать быстро?
TAHKEP (2006-12-18 17:16:00) [7]>ANTPro ©
> Что понимается под обработкой?Замена некоторых байт, расчёт MD5 этого блока
ANTPro (2006-12-18 17:08:00) [8]> [6] TAHKEP (18.12.06 16:53)
Что понимается под обработкой?
> [6] TAHKEP (18.12.06 16:53)
> Я, честно говоря, совсем не мастер :(
Мастеры с голубыми значками :)
TAHKEP (2006-12-18 16:53:00) [9]>ANTPro ©
> > wstr:=wstr+wBuf; // добавляем в wstr данные из wbuf
> Вот тут скорей всего и тормозит...
Нет, т.к. если производить обработку вообще без записи скорость еще более увеличивается
> А больше читать не судьба? (1-2mb)
> Да, и писать тоже поболее.
Можно, но опять таки если бы это не зависело от System скорость мало бы отличалась, а тут как правило разница в 2 раза :(
> PS: А вообще, процедура копирования, какая-то не понятная.
> .. Пре-Альфа? :)
Я, честно говоря, совсем не мастер :(
А как надо?
ANTPro (2006-12-18 16:42:00) [10]> [2] TAHKEP (18.12.06 16:20)
> wstr:=wstr+wBuf; // добавляем в wstr данные из wbuf
Вот тут скорей всего и тормозит...
> [2] TAHKEP (18.12.06 16:20)
> ..........//чтение блока в wBuf по 2048 байт из другого
> файла, их обработка
А больше читать не судьба? (1-2mb)
> [2] TAHKEP (18.12.06 16:20)
> //если накопилось уже 512 кб обработаных блоков - запишем
Да, и писать тоже поболее.
PS: А вообще, процедура копирования, какая-то не понятная... Пре-Альфа? :)
TAHKEP (2006-12-18 16:25:00) [11]wPrmrStream:PStream //PStream -- конечно же, а не array of Pstream
В общем, всё работает, но вот скорость отличается в два раза :(
Vladimir Kladov (2006-12-18 16:24:00) [12]UseDelphiMemoryManager
TAHKEP (2006-12-18 16:20:00) [13]>ANTPro
Я думал над этим, но там всё это размазано по процедуре обработки :)
Ну примерно так, ничего необычного вроде бы:
var
wstr:String; // тут накапливаем результат обработки
wbuf:string; // временный буфер для чтения
wPrmrStream:array of PStream; // поток в который сохраняем
i:integer;
begin
wPrmrStream:=NewWriteFileStream(OpenDirDialog1.Path+'\test.tmp');
wstr:='';
For i:=1 to 500000 do begin //рабочий цикл
..........//чтение блока в wBuf по 2048 байт из другого файла, их обработка
wstr:=wstr+wBuf; // добавляем в wstr данные из wbuf
If ((length(wstr) and $FFF80000)<>0)
then begin //если накопилось уже 512 кб обработаных блоков - запишем
wPrmrStream.Write(wstr[1],length(wstr));
wstr:='';
end;//then
end;//for i
.............//вывод сообщений и т.д.
wPrmrStream.Free;
end;
ANTPro (2006-12-18 15:44:00) [14]> [0] TAHKEP (18.12.06 13:39)
А код привести, не судьба?