PDA

View Full Version : میزان زمان اجرای برنامه



omidan321
سه شنبه 30 مهر 1392, 09:00 صبح
من میخام بدونم وقتی که کامپایلر به یه قسمتی از برنامه میرسه زمانسنج روشن شه تا یه جایی از برنامه بعد زمان صرف شده از زمان استارت تا پایانی که معلوم شده است رو داشته باشم

امیدوارم منظورمو درست رسونده باشم

منتظر نظرات اساتید هستم

یوسف زالی
سه شنبه 30 مهر 1392, 09:33 صبح
var
T: Cardinal;
begin
T := GetTickCount;
Do SomeThings...
T := GetTickCount -T;
showmessage(inttostr(T) + ' ms');
end;

omidan321
سه شنبه 30 مهر 1392, 10:05 صبح
a:a+1;
***
b:=a+1;
c:=b+6;
***
sum:=a+b+c;


ممنون جناب you -see کدی که دادید رو کجا باید استفاده کنم ؟
(میخام بین دو کدی با * جدا شدند رو حساب کنم چقد زمان میبره )

یوسف زالی
سه شنبه 30 مهر 1392, 10:40 صبح
برای تشکر از دکمه استفاده کنید.

کد هایی رو که می خواهید زمان گیری کنید باید به جای Do Something بگذارید.


var
T: Cardinal;
begin
a:a+1;

T := GetTickCount;

b:=a+1;
c:=b+6;

T := GetTickCount -T;
showmessage(inttostr(T) + ' ms');

sum:=a+b+c;

end;


توجه کنید که زمان گیری بر حسب میلی ثانیه انجام می شه نه کلاک پالس. بنابراین برای زمان های فوق العاده کوچیک باید کدها رو در حلقه های بزرگ بندازید تا سرشکن درستی از مقادیر به دست بیارید.
موفق باشید.

Felony
سه شنبه 30 مهر 1392, 10:59 صبح
بنابراین برای زمان های فوق العاده کوچیک باید کدها رو در حلقه های بزرگ بندازید تا سرشکن درستی از مقادیر به دست بیارید.
برای این موراد باید از Query Performance Counter ها که به مراتب دقت بیشتری دارند استفاده بشه ، برای دلفی تو این لینک (http://marlonsplace.awardspace.com/delphi/performance-tuning/measuring-code-performance-in-delphi.php) یک نمونه هست .

بهروز عباسی
سه شنبه 30 مهر 1392, 11:34 صبح
قبلاً در این باره بحث شده، ولی چون پاسخ ها به اندازه کافی کارآمد هستن تاپیک حذف نمیشه و فقط قفل میشه !

این تاپیک رو ببین "تست سرعت اجرای برنامه (http://barnamenevis.org/showthread.php?347148-%D8%AA%D8%B3%D8%AA-%D8%B3%D8%B1%D8%B9%D8%AA-%D8%A7%D8%AC%D8%B1%D8%A7%DB%8C-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87)"
به نقل از آقای ساتکی

در مورد شما بایستی از توابع high resolution استفاده نماید
var Frequency ,StartC ,EndC ,DiffC :TLargeInteger;
ms : LongWord;
begin
QueryPerformanceFrequency(Frequency);
QueryPerformanceCounter(StartC);

//your code here
Sleep(1200);

QueryPerformanceCounter(EndC);
DiffC := ((EndC - StartC) * 1000) div Frequency;



ms := (DiffC and $ffffffff);
Caption := format( 'It took %u ms\n', [ms]);
end;

و R0lex :

دوستان عزیز در حالت کلی از توابعی مثل GetTickCount فقط برای موارد ابتدایی استفاده می شود. اگر برنامه شما کمی بزرگ باشد باید از ابزارهایی که مخصوص این کار هستند استفاده کنید. یکی از این ابزارها AQTime است که نسخه Standard آن به همراه دلفی وجود دارد که برای کسب اطلاعات بیشتر می توانید به آدرس زیر مراجعه کنید:
http://smartbear.com

روز خوش