Главная страница
    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.061 c
15-1183225958
TruePunk
2007-06-30 21:52
2007.07.29
авторское право


15-1182701335
koha
2007-06-24 20:08
2007.07.29
Ищу хорошую инфу по компоненту TChart


2-1183443768
tytus
2007-07-03 10:22
2007.07.29
TSocketConnection - познее связывание - - в другом потоке.


3-1177312187
pavel_guzhanov
2007-04-23 11:09
2007.07.29
Создание базы данных при помощи Database Configuration Assistant


15-1182861256
de.
2007-06-26 16:34
2007.07.29
О Delphimaster





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский