Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.046 c
2-1183377068
Regdown
2007-07-02 15:51
2007.07.29
Ряд вопросов


2-1183582802
snowkam
2007-07-05 01:00
2007.07.29
баннер


2-1183353933
Vasyl
2007-07-02 09:25
2007.07.29
Вставка


15-1183469880
@!!ex
2007-07-03 17:38
2007.07.29
Добавить пункт в меню программы на Taskbar e.


2-1183457683
kilya
2007-07-03 14:14
2007.07.29
ошибка Circular unit reference





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский