PDA

View Full Version : تخمین زمان اجرای یک برنامه؟



MSK
جمعه 06 شهریور 1383, 17:08 عصر
اگه شما نیاز به اندازه گیری زمان اجرای یک برنامه یا یک رویه در حد میلی سانیه داشته باشید چه می کنید؟ :|
فرضا برای مقایسه سرعت دو الگوریتم متفاوت.

hr110
شنبه 07 شهریور 1383, 08:32 صبح
بعید میدونم که این کار را بتوان توسط ابزارهایی که در دست ما است انجام داد، ولی شما میتوانید برای اندازه گیری زمان الگوریتمتان آنرا چندین بار اجرا کرده و زمان بدست آمده را تقسیم بر تعداد نموده تا زمان هر الگوریتم بدست آید. :idea:

Developer Programmer
شنبه 07 شهریور 1383, 09:02 صبح
سلام دوستم
چرا از Sample های خود دلفی استفاده نمیکنی؟ مثالهای خوبی واسه تخمین زمان اجرای برنامه داره...

SalarSoft
شنبه 07 شهریور 1383, 09:03 صبح
می تونی این کار رو بکنی که اول برنامه زمان کنونی رو ذخیره کنه!

بعدش رویه مذبور فرا خوانده بشه و بعد اون باز هم زمان کنونی بعد از اجرای رویه ذخیره بشه!

با کم کردن زمان بعد اجرای رویه از زمان قبل اجرای رویه می توان زمان تخمینی اچرای رویه رو بدست آورد! :lol:

البته یادت باشه هر ثانبه برابر با 1000 میلی ثانیه است! :)

JavanSoft
شنبه 07 شهریور 1383, 09:06 صبح
یک جواب بی ربط
پیشنهاد می کنم تا حد امکان در جداول چند سطحی از Lookup استفاده نکنید

Mohammad S
یک شنبه 08 شهریور 1383, 00:29 صبح
جناب آقای وکیلی منظورتان از جداول چند سطح چیست؟ لطفا مثال بزنید!
با تشکر

MiRHaDi
یک شنبه 08 شهریور 1383, 00:42 صبح
سلام


var t : tdatetime;
begin
t := now;
// insert your Code here
showmessage(timetostr(now-t));
end;

فکر کنم وسالتون این باشه !
حالا برای دو تا الگوریتم میتونید با هم مقایسش کنید
ولی اگر تخمین زمان رو میخواید یعنی قبل از اینکه کار تموم شه بخواید بگید حدوداچقدر طول میکشه راحش فرق داره ! اگه خواستید بگید تا بگم
قربان همه

_alish_
یک شنبه 08 شهریور 1383, 10:33 صبح
اگر برای مقایسه الگوریتم می خواهی یک کار تقریبا جالب
به انتهای برنامه هایی که می خواهی مقایسه کنی ShowMessage بذار (البته در Exe های جدا)بعد از طریق برنامه اصلی این Exeها را در خطهای پشت سر هم فراخوانی کن ( خطا زمانی خیلی کمتر از مقدار زمان محاسبه شده توسط Time و غیر است) خوب به ترتیب Message ها را با نام رویه و مدت زمان پایان آنها را ببین .
اگر هم نمی خوای برنامه جدا داشته باشی درجند Edit مقدار زمان را قرار بده با یک عدد Global.
البته این پیشنهاد شاید در نظر اول جالب نباشد ولی دقیقتر است.من که از این روش استفاده میکنم

JavanSoft
یک شنبه 08 شهریور 1383, 11:10 صبح
منظورم جداول Master/Detail است

MM_Mofidi
یک شنبه 08 شهریور 1383, 12:52 عصر
برای این منظور شما میتوانید از تابع GetSystemTime استفاده کنید.
برای این کار یک ماژول بنویسید که زمان را برگرداند.
سپس برای حذف خطای ناشی از فراخوانی تابع دوبار آن را صدا زده و زمانهای برگردانده شده را از هم کم کنید.که نتیجه حاصله میزان تاخیر فراخوانی و اجرای تابع است سپس جهت تست تابع را ابتدا و انتهای برنامه فراخوانده و از اختلاف آنها میزان تاخیر فراخوانی را کسر نمایید.مقدار حاصله زمانی است که برنامه شما برای اجرا مصرف میکند.

تابع فوق زمان را با دقت Millisecond بر میگرداند

Sohrab_Tapar
یک شنبه 08 شهریور 1383, 14:36 عصر
az GetTickCount estefade kon

MSK
یک شنبه 08 شهریور 1383, 14:37 عصر
جناب Alish عزیز میشه یه کم بیشتر توضیح بدید درست متوجه نشدم :mrgreen:

MSK
دوشنبه 09 شهریور 1383, 10:19 صبح
آقا GetTickCount رو چک کردم. (:D)
فکر کنم سریع ترین راهش همین باشه. :متفکر:
ولی نکته اینجاست که تصادفا شما راهی نمی شناسید که عدد تابع رو صفر کرد که اشتباهی موقعی که تابع یه دور کامل میزنه و دوباره صفر می شه رو از بین برد :?: