PDA

View Full Version : آیا تایمر سرعت برنامه را کاهش می دهد؟



bahar_engineer
یک شنبه 11 مرداد 1388, 12:51 عصر
آیا استفاده از چند تایمر در یک صفحه سرعت آن را کاهش می دهد ؟

به چه میزان ؟

مثلاً 3 تایمر در یک صفحه (حداکثر)

کاهش سرعت به اندازه ای هست که لازم به نظر برسد که تایمرها حذف شوند؟

hozouri
یک شنبه 11 مرداد 1388, 13:05 عصر
دوست عزیز تایمر هم یه thread حساب میشه .
و هیچ تاثیری در کند شدن برنامه ندارد.
شما 1000 تا تایمر هم که داشته باشید که هر 1 میلی ثانیه فعال باشه هیچ روندی در اجرای برنامه نداره.
اون چیزی که برنامه ی شما رو کند می کنه دستورات هست.

مثلاً توی یک تایمر یه حلقه می زنیم که 3 ثانیه این حلقه به طول می انجامه و برنامه یه توقف نسبت به حلقه خواهد داشت.

bahar_engineer
یک شنبه 11 مرداد 1388, 13:11 عصر
مثلاً توی یک تایمر یه حلقه می زنیم که 3 ثانیه این حلقه به طول می انجامه و برنامه یه توقف نسبت به حلقه خواهد داشت.

درست متوجه نشدم یعنی چنین کدی ممکنه سرعت برنامه رو کاهش بده؟ کدی که داخل خود تایمر هست یا اینکه صرفاً زمانی که توی خود تایمر یه حلقه مثلاً for بذاریم؟



sec += 1;
timer1.Interval = 500;
if (sec > 6)
{
timer1.Enabled = false;
sec = 0;
objwrong.FlashPlayerForm.Close();
button1.Enabled = true;
}
و با هر کلیک روی باتن دوباره تایمر فعال می شه



private void button1_Click(object sender, EventArgs e)
{
objwrong = new wrong();
objwrong.Fwrong();
timer1.Enabled = true;
button1.Enabled = false;
}

esmaeily-hosein
یک شنبه 11 مرداد 1388, 18:07 عصر
دوست عزیز تایمر هم یه thread حساب میشه .
و هیچ تاثیری در کند شدن برنامه ندارد.
شما 1000 تا تایمر هم که داشته باشید که هر 1 میلی ثانیه فعال باشه هیچ روندی در اجرای برنامه نداره.
این حرف اساس درستی نداره .
اولا به خاطر اینکه timer در thread دیگه ای اجرا نمیشه .
دوما تعداد timer ها بسته به نوع cpu و سیستم عامل متغیر است .

استفاده از Timer بستگی به نوع کاری است که قراره ما انجام بدهیم . در بعضی موارد بهترین گزینه در برخی دیگر بدترین گزینه !

hozouri
یک شنبه 11 مرداد 1388, 18:50 عصر
این حرف اساس درستی نداره .
ا

ببخشید , معذرت می خوام , دیگه دانش و تجربیاتم رو به کسی نمی گم.



اولا به خاطر اینکه timer در thread دیگه ای اجرا نمیشه .


؟؟؟ میشه ما رو هم مطلع بفرمایید منظور شما چی هست ؟



دوما تعداد timer ها بسته به نوع cpu و سیستم عامل متغیر است .


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



استفاده از Timer بستگی به نوع کاری است که قراره ما انجام بدهیم . در بعضی موارد بهترین گزینه در برخی دیگر بدترین گزینه !

اینم من پیشاپیش خدمت دوستان عرض نمودم ...

باز هم از دوستان معذرت خواهی می کنم

tdkhakpur
یک شنبه 11 مرداد 1388, 21:02 عصر
سلام
ببینید تا اونجایی که میدانtimerیک thread نیست چون سرعت ثابت داره و رابطه مستقیم با ساعت سیستم دارد.
ولی در مورد سرعت باید عرض کنم که هیچ رابطه ای بین سرعت و ساعت سیستم برقرار نیست بلکه یک نوع گزینه برای پردازش میباشد و سرعت عملیات بستگی به کدهای مورد استفاده در پروسه تایمر دارد نه خود تایمر.

SabaSabouhi
دوشنبه 12 مرداد 1388, 09:21 صبح
سلام
ببینید تا اونجایی که میدانtimerیک thread نیست چون سرعت ثابت داره و رابطه مستقیم با ساعت سیستم دارد.


با سلام
دوست گرامی، یک تایمر داریم که مربوط به CPU و پایه IRQ 0 هست که ساعت کامپیوتر رو کنترل می‌کنه و اصلاً به این بحث ربطی نداره.
در مورد کنترل timer مطمئن نیستم ( هر چند که نباید فرق عمده‌ای داشته باشه)، اما اگه از System.Threading.Timer استفاده بشه قطعاً در یک Thread جداگانه قرار می‌گیره.

صبا صبوحی

esmaeily-hosein
دوشنبه 12 مرداد 1388, 11:12 صبح
[]ببخشید , معذرت می خوام , دیگه دانش و تجربیاتم رو به کسی نمی گم.[/بهتره به مستندات C++ در این مورد نگاهی بندازید . تا متوجه منظور من در مورد سیستم عامل باشید و cpu بشی .

توابع Api مربوط به SetTimer , Kill Timer نیز به دردت میخوره .
کسانی که مقداری visual c++ کار کرده باشند منظور مرا بهتر درک میکنند .

bahar_engineer
دوشنبه 12 مرداد 1388, 11:21 صبح
دوستان دست همگی درد نکنه

من به هر حال 4 تا تایمر تو بعضی از صفحاتم گذاشتم که واقعاً هم نمی شد کمترش کنم

THX

مهرداد تاجدینی
دوشنبه 12 مرداد 1388, 11:53 صبح
بله، اگر تعداد تایمرها در برنامه زیاد بشه سرعت میاد پایین. هم خودم این رو تجربه کردم و هم توی MSDN خوندم. باید توجه داشت که تایمرها جز منابع ویندوز محسوب میشن! البته مقدار پایین اومدن سرعت بستگی به دو چیز داره:
1) مقدار Interval تایمرها :
هر چه رویداد Tick تایمرها زود تر فراخوانی بشه، سرعت هم پایین تر میاد.

2) کد درون رویداد Tick: این هم که طبیعیه! هرچه کد سنگین تر باشه، سرعت هم به همون نسبت پایین تر میاد.

ضمنا تایمرها چند نوع دارند. اگر از تایمر موجود در ToolBox ویژوال استدیو استاده می کنید، باید توجه داشته باشید که این تایمرها در همون Thread برنامه اجرا میشن و Thread جداگانه ای براشون ساخته نمیشه، به نقل از MSDN (برای این کلاس: System.Windows.Forms.Timer)



A Timer is used to raise an event at user-defined intervals. This Windows timer is designed for a single-threaded environment where UI threads are used to perform processing. It requires that the user code have a UI message pump available and always operate from the same thread, or marshal the call onto another thread.


اما همون طور که دوستمون SabaSabouhi فرمودن، اگه با استفاده از System.Threading.Timer یک تایمر بسازیم، این تایمر در یک Thread دیگه اجرا میشه.

نقل از MSDN:

Use a TimerCallback delegate to specify the method you want the Timer to execute. The timer delegate is specified when the timer is constructed, and cannot be changed. The method does not execute on the thread that created the timer; it executes on a ThreadPool thread supplied by the system.