Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.07.29;
Скачать: CL | DM;

Вниз

Худшая скорость копирования файлов при использовании алт. 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 вся ветка

Текущий архив: 2007.07.29;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.023 c
15-1182881216
stasserov
2007-06-26 22:06
2007.07.29
Delphi for PHP


2-1183302519
Qzzma
2007-07-01 19:08
2007.07.29
Как узнать путь запущенного приложения?


6-1166624594
n_shadow
2006-12-20 17:23
2007.07.29
Заполнение структуры PHostEnt


1-1179846066
nickmas
2007-05-22 19:01
2007.07.29
MDI-окна


15-1183015789
de.
2007-06-28 11:29
2007.07.29
Нужна картинка