Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2004.06.06;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.033 c
14-1084289462
Knight
2004-05-11 19:31
2004.06.06
Вокруг рутина, а душа требует экшн...


14-1084728062
Igor_thief
2004-05-16 21:21
2004.06.06
LineDDA


3-1084467146
3APA3A
2004-05-13 20:52
2004.06.06
insert результатов select а


6-1082191220
Sanek_metaller
2004-04-17 12:40
2004.06.06
Взаимодействие с HTML


3-1084423055
vlgrig1961
2004-05-13 08:37
2004.06.06
Не понятно почему из TMemo в function появляются пустые строки





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