PDA

View Full Version : سوال: سرعت کدام کد بیشتر است



Delphi7_love
شنبه 23 مرداد 1389, 15:14 عصر
اگر روی فرم تعداد زیادی شی داشته باشیم برای پاک کردن آنها از دستور

for i:=0 to Componentcount-1 do
begin
if (Components[i]).ClassName='Tedit' then
TEdit(Components[i]).Clear ;
end;
;
راحتتره ولی میخوام ببینم سرعت این روش بیشتره یا اینکه یکی یکی clear کنیم


edit1.Clear;
edit2.Clear;
edit3.Clear;

tdkhakpur
شنبه 23 مرداد 1389, 17:14 عصر
فرق چندانی نداره حتما هم راه مستقیم سریعتر هست(البته دوسه خط کد برای جستجوی ایندکس i استفاده نمیشه)

pezhvakco
شنبه 23 مرداد 1389, 17:51 عصر
درود :
سرعت کد دستور دوم بیش تره باید باشه چون در کد دستور اول یه حلقه داری و یه دستور شرطی که هر دوی این ها باعث کاهش سرعت میشه .

بدرود .

SAASTN
شنبه 23 مرداد 1389, 21:44 عصر
واقعا اختلاف سرعت در همچین مواردی ناچیز و قابل چشمپوشیه، ولی فکر می کنم کد اول رو اگه به صورت زیر بنویسیم باز هم سریعتر بشه:
for I := 0 to ComponentCount - 1 do
if Components[I] is TCustomEdit then
TCustomEdit(Components[I]).Clear;

فکر می کنم مقایسه رشته ها زمان بیشتری طول بکشه، البته این دوتا کد از نظر نتیجه یه تفاوت کوچیک دارن. در صورتی که روی فرم از چند نوع Edit مختلف کنترلهایی وجود داشته باشن، کد شما فقط اونهایی رو پاک می کنه TEdit هستند، ولی کدی که من گذاشتم هر کنترلی که از TCustomEdit مشتق شده باشه رو پاک می کنه.

Delphi7_love
شنبه 23 مرداد 1389, 21:56 عصر
از توجهتون ممنون
نکته اینجاست که در کدی که بدون حلقه اجرا میشه برای پاک کردن هر ادیت یک گام اجرا داریم ولی در حلقه برای هر کدام سه گام اجرا . یکی داخل حلقه که شمارنده چک میشه و یکی شرط درست بودن و یکی پاک کردن

SAASTN
شنبه 23 مرداد 1389, 22:24 عصر
نکته اینجاست که در کدی که بدون حلقه اجرا میشه برای پاک کردن هر ادیت یک گام اجرا داریم ولی در حلقه برای هر کدام سه گام اجرا .
شکی نیست که توی انجام همچین کاری کد بدون حلقه کار رو توی زمان کمتری انجام می ده، ولی این زمان نا محسوسه. مثلا من تصور نمی کنم با یه پردازنده معمولی اگه این کدها رو برای 5000 کنترل مقایسه کنیم اختلاف زمانی بیشتر از 0.1 ثانیه داشته باشن. یا اگه مثلا بخوایم برای 20 تا کنترل مقایسه رو انجام بدیم که عملی باشه فکر نکنم GetTickCount که دقتش 0.001 ثانیست اصلا تمایزی بین این دو قائل بشه، حتما جوابش تو هر دو "0" خواهد بود!