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

Вниз

почему так ???   Найти похожие ветки 

 
GanibalLector ©   (2004-05-23 16:01) [0]

Решил я в одной своей проге сохранение файлов сделать не через assignfile а через createfile(ну на API).Сделал все работает.Потом решил проверить,а кто быстрее работает assingfile или createfile.Естественно думал ,что createfile быстрее,НО...
У меня получилась следующая статистика:
-через createfile файл размером 40М создавался 1,87сек
-через assignfile тот же файл(40М) создавался 1,12 сек

Кто нибудь мне может обьяснить почему так???


 
jack128 ©   (2004-05-23 16:06) [1]

и тот и другой код приведи, а там видно будет.может делфи кеширует запись на винт(хотя СИЛЬНО сомниваюсь, но вдру ;-)), а может ты что то не так сделал..


 
GanibalLector ©   (2004-05-23 16:32) [2]

procedure TForm1.Button1Click(Sender: TObject);
var ffile:textfile;
i,T1:integer;
begin
deletefile("C:\fucke1.txt");
T1:=GetCurrentTime;
assignfile(ffile,"C:\fucke1.txt");
rewrite(ffile);
for i:=1 to 800000 do
writeln(ffile,"tratatatatatatata");
closefile(ffile);
Caption:=inttostr(GetCurrentTime-T1);
end;

procedure TForm1.Button2Click(Sender: TObject);
var F:THandle; Dw:Dword;i,T1:integer;
begin
deletefile("C:\fucke2.txt");
T1:=GetCurrentTime;
f:=CreateFile(
                 pChar("C:\fucke2.txt"),
                 GENERIC_READ or GENERIC_WRITE,
                 0,
                 nil,
                 OPEN_ALWAYS,
                 FILE_ATTRIBUTE_NORMAL,
                 0);
   SetFilePointer(f,0,nil,FILE_END);
   for i:=1 to 800000 do
   WriteFile(f,"tratatatatatatata"+#10#13,19,Dw,nil);
   closehandle(f);
Caption:=inttostr(GetCurrentTime-T1);
end;


 
VMcL ©   (2004-05-23 16:42) [3]

>>GanibalLector ©  (23.05.04 16:32) [2]

1.
Перезагрузись. Нажми Button1. Запиши результат.
Перезагрузись. Нажми Button2. Запиши результат.

2. GetCurrentTime - не очень-то точный измеритель для малых промежутков времени. Попробуй QueryPerformanceFrequency() + QueryPerformanceCounter() или инструкцию процессора RDTSC.


 
GanibalLector ©   (2004-05-23 16:45) [4]

2 VMcL ©   (23.05.04 16:42) [3]
А нафига перегружаться???В чем фишка???


 
Palladin ©   (2004-05-23 16:48) [5]

Работа с текстовыми файлами идет через буффер.


 
GanibalLector ©   (2004-05-23 16:48) [6]

2 VMcL ©   (23.05.04 16:42) [3]
> GetCurrentTime - не очень-то точный измеритель для малых промежутков времени
Может Вы и правы,но разница существенная.Я увеличил значение переменной i.Получил примерно следующее :4 сек. и 20 сек.


 
GanibalLector ©   (2004-05-23 16:49) [7]

2 Palladin ©   (23.05.04 16:48) [5]
Так а что делать???Как увеличить скорость в АПЯХ???


 
Palladin ©   (2004-05-23 16:52) [8]

Организовать свой буффер.


 
GanibalLector ©   (2004-05-23 16:55) [9]

2 Palladin ©   (23.05.04 16:52) [8]
Т.е. примерно так :
for i:=1 to 800000 do
...заполняем буфер
WriteFile(f,буффер,length(буффер),Dw,nil);
Я правильно Вас понял???


 
Palladin ©   (2004-05-23 17:00) [10]

Да, примерно так, только не нужно такой здоровый буффер. Хотя бы килобайт в 16, время записи уже уменьшится...


 
GanibalLector ©   (2004-05-23 17:03) [11]

2 Palladin ©   (23.05.04 17:00) [10]
Ок.Попробуем-с.Спасибо,кстати...


 
VMcL ©   (2004-05-23 20:59) [12]

>>Palladin ©  (23.05.04 16:52) [8]

Хммм. Думаю дело не в буфере. Софтварный дисковый кеш, имеющийся в Винде, никто вроде не отменял, так что странно...


 
Palladin ©   (2004-05-23 21:03) [13]


> [12] VMcL ©   (23.05.04 20:59)

Согласитесь, есть все таки разница между тысячью записями в кеш по 19 байт и 19тью записями по тысяче байт....


 
Anatoly Podgoretsky ©   (2004-05-23 21:17) [14]

VMcL ©   (23.05.04 20:59) [12]
Именно в буфере, кеш к этому отношение не имеет, время здесь тратится на вызов API функции. Легко проверить сделать запись большого файла по одному байту и блоками по 4кб. Тоже повторить для файлов Паскаля, в которых обращение к АПИ будет только после заполнения внутреннего буфера.


 
GanibalLector ©   (2004-05-23 21:45) [15]

2 Anatoly Podgoretsky and Palladin
Спасибо еще раз...



Страницы: 1 вся ветка

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

Наверх




Память: 0.48 MB
Время: 0.02 c
14-1085050729
Том
2004-05-20 14:58
2004.06.06
Как решить задачу !


14-1084755803
ИМХО
2004-05-17 05:03
2004.06.06
Кодеки для MPG


1-1085226058
Talle
2004-05-22 15:40
2004.06.06
Использовать процедуры из Dll, написанного на С builder6?


4-1082639648
Talla2k
2004-04-22 17:14
2004.06.06
Проблемы с потоком


3-1084195613
karburator
2004-05-10 17:26
2004.06.06
Текущая дата в FB1.5 / IB





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