Toon posts:

[Delphi] timing van executietijd

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi Tweakgenoten,

Ik vroeg me af of iemand me kan vertellen hoe ik de executietijd van een (willekeurig en zelf geschreven) programma in Delphi (of Java) kan bepalen. Bijv. ik wil de executietijd van diverse algoritmes voor het bepalen van de fibonacci-reeks met elkaar vergelijken om zo iets over de snelheid te kunnen zeggen.
(Het mooiste zou zijn wanneer deze tijdmeting niet tenkoste van de executietijd van het programma zou gaan).

Alvast MEGA bedankt!
Blade.

Verwijderd

Bedoel je dat het programma niet aangepast mag worden?

Als het programma wel aangepast mag worden, kun je toch zelf de tijdmeting doen?

Je zou ook naar een profiler kunnen kijken, bv gpprofile.

Verwijderd

Topicstarter
Ik heb idd liever dat het programma niet aangepast mag worden.
Maar als je weet hoe het met aanpassen van programma wel kan dan hoor ik dat ook heel graag! Ik heb hievoor naar functies in Delphi gezocht maar helaas nog niks gevonden.

Verwijderd

Vraag de tijd op voordat het algoritme begint en vraag de tijd op na het algoritme. Het verschil is de executietijd. :?

kijk eens naar bijvoorbeeld de functie now()

Verwijderd

Zoiets?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
function TimeDiffToStr(const ATime: TDateTime): string;
var
  H, M, Sec, MSec: Word;
begin
  DecodeTime(ATime, H, M, Sec, MSec);

  if H = 0 then
    Result := ''
  else
    Result := Format('%d uren ', [H]);
  if M = 1 then
    Result := Result + '1 minuut '
  else if M > 1 then
    Result := Result + Format('%d minuten ', [M]);
  if Result > '' then Result := Result + 'en ';
  Result := Result + Format('%ds %.3dms', [Sec, MSec]);
end;

var
  StartTime: TDateTime;
begin
  StartTime := Time;
  
  { Doe iets }

  ShowMessage(TimeDiffToStr(Time - StartTime));
end;

  • Kool
  • Registratie: September 1999
  • Niet online
Vraag GetTickCount op voor en na het stuk code wat je wilt timen. Verschil is het aantal milliseconden wat voorbij is.

Is niet zo precies, dus moet je niet gebruiken om 1 klein functietje te timen, maar hele stukken code.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 28-08 12:00

Janoz

Moderator Devschuur®

!litemod

Ik heb urgent maar ff verwijderd. Iedereen hier in PW heeft evenveel recht op een antwoord als ieder ander. Het ene topic is niet urgenter dan het andere...

Maar ff ontopic. Zeker bij java valt er weinig over executie tijd te zeggen omdat je nooit echt weet waar de garbage collector mee bezig is. Een veel betrouwbare manier is gewoon uitrekenen welk algoritme sneller is. Hiervoor kun je de orde van het algoritme uitrekenen. De orde van een algoritme komt ongeveer neer op de verhouding tussen een bepaald getal dat de grootte van de invoer aangeeft en het aantal stappen dat het algoritme nodig heeft.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 02-09 19:44

Gerco

Professional Newbie

Als je met Win32 wil timen (nauwkeurig) moet je eens naar QueryPerformanceCounter() en QueryPerformanceFrequency() kijken. Voor zover ik weet is dat de meest nauwkeurige timer die er in je PC zit.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Verwijderd

Wat ik in jou geval zou doen: een profiler gebruiken. Zelf heb ik hele goede ervaringen met ProDelphi (www.prodelphi.de). Kun je alle proc. en functies timen.
1x runnen, later in "Prodelphi" krijg je overzicht te zien van: gem. exec. tijd, aantal call's, totale exec. tijd, etc. Echt zeer handig. HEb hier op werk een proces versneld met 1500% !!! (5uur -> 20min)
Pagina: 1