Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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

А код привести, не судьба?


Наверх

Титульная страница Поиск, карта сайта Написать письмо