bir komutun çalışma süresini nasıl buluruz

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
mucar
Kıdemli Üye
Mesajlar: 247
Kayıt: 17 May 2005 01:14

bir komutun çalışma süresini nasıl buluruz

Mesaj gönderen mucar »

s.a.

aynı işi gören iki kod var. ben bunların hangisinin daha verimli çalıştığını nasıl anlayabilirim? timer nesnesindeki en küçük zaman 1 ms. olduğundan ikisi için de 0 ms çıkıyo. Milisaniyenin altına nasıl inilebilir? :roll: :?:

tşk...
En son mucar tarafından 11 Ağu 2005 12:14 tarihinde düzenlendi, toplamda 2 kere düzenlendi.
"Evine bakmaktan aciz olan; ilerici, üç kıtaya hükmeden ecdadın mı gerici?"
Kullanıcı avatarı
ender_arslanturk
Kıdemli Üye
Mesajlar: 709
Kayıt: 18 Şub 2005 03:38
Konum: İstanbul

Mesaj gönderen ender_arslanturk »

Merhaba

aynı işi gören iki komut hangisidir ?

Saygılar,
Kullanıcı avatarı
mucar
Kıdemli Üye
Mesajlar: 247
Kayıt: 17 May 2005 01:14

Mesaj gönderen mucar »

Kod: Tümünü seç

WinExec('command.com /c md c:\deneme',sw_Hide);
ile

Kod: Tümünü seç


var  St1: array[0..MAX_PATH-1] of Char;
..

  St1:='c:\deneme';
  CreateDirectory(St1, nil);

İki kodun çalışma süresini ölçmeyi meraktan dolayı denedim. Çok da bir süre farketmez verimlilik olarak ama ikisi de 0 ms çıkınca acaba nasıl mikrosaniyelere veya nanosaniyelere inildiğini merak ettim daha çok. Mümkün müdür?
"Evine bakmaktan aciz olan; ilerici, üç kıtaya hükmeden ecdadın mı gerici?"
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Mesaj gönderen sadettinpolat »

google da microseconds delphi kelimelerini aratınca çıkan sonuçlardan ilk sayfadaki bilgiler...
he best way I've found to implement accurate timing is to use QueryPerformanceCounter and QueryPerformanceFrequency procedures to access the hardware timer in Windows - typically with 1 microsecond (millionths of a second) resolution. It's easy to use, and and accurate. Beginners can get more information about these routines is to put the cursor on the routine name in Delphi and press F1 to bring up a Help screen. (This works for any Delphi component or language element by the way.)
http://www.delphiforfun.org/Programs/De ... timing.htm


Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
  start,stop1,stop2,freq:int64;
  i:integer;
begin
  screen.cursor:=crHourGlass; {show busy cursor}
  QueryPerformanceFrequency(freq); {Get frequency}

  QueryPerformanceCounter(start); {Get initial count}
  
  for i:=1 to 1000000 do;  {empty loop}
  QueryPerformanceCounter(stop1); {Get 1st end count}
  for i:=1 to 1000000 do application.processmessages; {do it loop}
  QueryPerformanceCounter(stop2);  {Get 2nd end count}
  screen.cursor:=crDefault;  {show normal cursor}
  If freq>0  {Display (loop2 count - loop1 count)/freq 

                   to get time in microseconds}
  then showmessage('Time for a call to  processmessages is '
                     + inttostr(((stop2-stop1)-(stop1-start)) div freq)
                     +' microseconds')
  else showmessage('No hardware timer available');
end;
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
Kullanıcı avatarı
mucar
Kıdemli Üye
Mesajlar: 247
Kayıt: 17 May 2005 01:14

Mesaj gönderen mucar »

Teşekkür ederim öncelikle. Evet dün konuyu açtıktan sonra araştırırken ben de bulmuştum o yazıyı. Hatta denedim. Yine 0 ms çıktı. Ben de oradaki "div freq" i kaldırdım. Yani mikrosaniye cinsinden değil de işlemcinin clock çevrimi cinsinden çalışma zamanlarını buldu bu sefer. CreateDirectory çok daha hızlı çalışıyor. Ayrıca bu konuyla ilgili bulduğum bir kaç yazının linkini de ekliyorum. Belki faydalı olur.

http://www.deepsoftware.ru/articles/calcticks.html
http://www.geocities.com/izenkov/product-zprof.htm
http://www.delphi32.com/vcl/4900/
"Evine bakmaktan aciz olan; ilerici, üç kıtaya hükmeden ecdadın mı gerici?"
Cevapla