Форум: "KOL";
Текущий архив: 2007.07.29;
Скачать: [xml.tar.bz2];
ВнизХудшая скорость копирования файлов при использовании алт. System? Найти похожие ветки
← →
TAHKEP (2006-12-18 13:39) [0]Пишу небольшую утилитку, обрабатывающую определённым образом большие (~1Gb) файлы. Суть очень проста -- берёться такой файл, последовательно просматривается, вносятся небольшие изменения и небольшими кусками по ~512кб пишется в новый файл.
Случайно заметил, что при использовании альтернативных библиотек System почти в два раза падает скорость работы програмы, видимо на этапе записи в файл, т.к. без записи время работы практически одинаковое. Так и должно быть? Это "расплата" за экономию 10кб?
Проверял на двух машинах под Win2k+SP4(NTFS, копирование шло с одного физ.устройства на другое) и WinXP+SP2(FAT32, копирование происходило на одном физ.устройстве) под D7 и разными версиями KOL 2.41, 2.48, 2.49
З.Ы. За KOL огромное спасибо!!! :)
← →
ANTPro © (2006-12-18 15:44) [1]> [0] TAHKEP (18.12.06 13:39)
А код привести, не судьба?
← →
TAHKEP (2006-12-18 16:20) [2]>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;
← →
Vladimir Kladov (2006-12-18 16:24) [3]UseDelphiMemoryManager
← →
TAHKEP (2006-12-18 16:25) [4]wPrmrStream:PStream //PStream -- конечно же, а не array of Pstream
В общем, всё работает, но вот скорость отличается в два раза :(
← →
ANTPro © (2006-12-18 16:42) [5]> [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:53) [6]>ANTPro ©
> > wstr:=wstr+wBuf; // добавляем в wstr данные из wbuf
> Вот тут скорей всего и тормозит...
Нет, т.к. если производить обработку вообще без записи скорость еще более увеличивается
> А больше читать не судьба? (1-2mb)
> Да, и писать тоже поболее.
Можно, но опять таки если бы это не зависело от System скорость мало бы отличалась, а тут как правило разница в 2 раза :(
> PS: А вообще, процедура копирования, какая-то не понятная.
> .. Пре-Альфа? :)
Я, честно говоря, совсем не мастер :(
А как надо?
← →
ANTPro © (2006-12-18 17:08) [7]> [6] TAHKEP (18.12.06 16:53)
Что понимается под обработкой?
> [6] TAHKEP (18.12.06 16:53)
> Я, честно говоря, совсем не мастер :(
Мастеры с голубыми значками :)
← →
TAHKEP (2006-12-18 17:16) [8]>ANTPro ©
> Что понимается под обработкой? Замена некоторых байт, расчёт MD5 этого блока
← →
ANTPro © (2006-12-18 17:33) [9]> [8] TAHKEP (18.12.06 17:16)
> расчёт MD5 этого блока
Тады может это тормоз всего? Как по скорости вполняется MD5? При копировании процессор под завязку?
ЗЫЖ А что хоть делает процедура/должна делать быстро?
← →
TAHKEP (2006-12-18 17:45) [10]>ANTPro ©
> Тады может это тормоз всего? Как по скорости вполняется
> MD5? При копировании процессор под завязку?
>
> ЗЫЖ А что хоть делает процедура/должна делать быстро?
>
MD5 не тормоз. :) Если смотреть по времени то обработка 1Gb (Celeron 2.6, 512Мб, работа на одном физ. устройстве) занимает:
а) без записи результата на диск ~ 1 мин
б) с записью при подключении стандартных System ~ 4 минуты
в) С записью при использовании модифицированных System ~ 9 минут
Ресурсов проца жрёться не очень много -- около 40-50%, т.е. проц "не захлёбывается" точно.
← →
ANTPro © (2006-12-18 17:57) [11]> [10] TAHKEP (18.12.06 17:45)
> б) с записью при подключении стандартных System ~ 4 минуты
> в) С записью при использовании модифицированных System ~
> 9 минут
А с FastMM4 ? И UseDelphiMemoryManager?
← →
ANTPro © (2006-12-18 17:58) [12]> [10] TAHKEP (18.12.06 17:45)
> Ресурсов проца жрёться не очень много -- около 40-50%, т.е.
> проц "не захлёбывается" точно.
Это для варианта: А?
← →
TAHKEP (2006-12-18 18:22) [13]
> А с FastMM4 ? И UseDelphiMemoryManager?
Про fastMM4 пока ничего не знаю, а UseDelphiMemoryManager пока даёт ошибку, причём размер .exe при его использовании у меня получается всего на 2-3 кб меньше чем с использованием стандартного System.
> Это для варианта: А?
Во всех трёх случаях
← →
ANTPro © (2006-12-18 19:10) [14]> [13] TAHKEP (18.12.06 18:22)
Странно это все...
Минимально компилируемый код в студию...(Лучше в архиве на slil.ru или еще куда)
ЗЫЖ Времени почти нет (ABBYY Screenshot Reader переписываю :)
Страницы: 1 вся ветка
Форум: "KOL";
Текущий архив: 2007.07.29;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.037 c