الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

عمل timer على مستوى الميكروثانية

مغلق
بدأه Whale في 30 يونيو 2006 · 7 رد · 847 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

هل يعرف احدكم طريقة لعمل timer على مستوى الميكروثانية

مثلا لاستخدامه لقياس سرعة تنفيذ الكود مثلا

تحياتي

:)

#2
اقتباس
مثلا لاستخدامه لقياس سرعة تنفيذ الكود مثلا

لست مضطرا للإنشاء Timer يكفي استخدام الخاصية Environment.TickCount لمعرفة الوقت المنقضي يمكنك خزن القيمتين قبل التنفيذ وبعد التنفيذ ثم طرحها من بعضهما البض

#5

السلام عليكم

عندما نفذت الكود التالي و جدت ان قيمة المتغير AlgoTime اقل من قيمة المتغير T نظر للكود التالي:

	   private void button1_Click(object sender, EventArgs e)
	   {

		   int StartTime = Environment.TickCount;
		   TimeSpan StartTime1 = System.Diagnostics.Process.GetCurrentProcess().TotalProcessorTime;

		   for (int I = 0; I <= 100000000; I++)
		   {
			   object o = new object();
			   GC.SuppressFinalize(o);
		   }

		   int EndTime = Environment.TickCount;
		   TimeSpan EndTime1 = System.Diagnostics.Process.GetCurrentProcess().TotalProcessorTime;

		   TimeSpan AlgoTime = TimeSpan.FromTicks(EndTime - StartTime);
		   TimeSpan T = EndTime1 - StartTime1;


		   MessageBox.Show(String.Format("Via TickCount: {0}\n Via TotalProcessorTime: {1}", AlgoTime, T));
	   }

واتضح في النهاية ان الدالة TimeSpan.FromTicks تاخذ 100-nanosecond كوسيط لهذا عدلت المثال بحيث تصبح الدالة كتالي:

TimeSpan AlgoTime = TimeSpan.FromTicks((EndTime - StartTime) * 10000);

وهذا والله اعلم

تحياتي

:)

#6

شباب هل لدى احدكم تفسير على الاتي:

في كل مرة انفذ الكود اعلاه احصل على قيمة مختلفة للمتغير T !!!!!!!!!!!!!!!! اليس من المفترض ان تكون القيمة ثابتة اذا لم يكن كذلك فكيف يمكنني قياسها اذا !!!

بحثت في ال Help ووجدت ان الدالة Process.GetCurrentProcess().TotalProcessorTime ماهي الا :

This value is the sum of the UserProcessorTime and the PrivilegedProcessorTime.

و ال UserProcessorTime

the amount of time that the associated process has spent running code inside the application portion of the process (not inside the operating system core).

ما هو ال application portion

و ال PrivilegedProcessorTime

the amount of time that the process has spent running code inside the operating system core

وما هو operating system core

تحياتي

:)

#7

يوجد في نظام التشغيل شئ إسمه Kernel mode و user mode

فالــــ Kernel mode يسمى أيضا Privileged mode وهو التعليمات اللي في برنامجك ولها علاقة بنظام التشغيل مثل التعامل مع الــ resource

والذاكرة وإستخدام الـــ system call والوقت اللي يستغرقه تنفيذ هذه التعليمات يمسى PrivilegedProcessorTime او Kernel Time

أما user mode فهو التعليمات اللي برنامجك وتخصك أنت كـــuser مثل الدوال اللي أنت عرفتها بنفسك وغيرها والوقت اللي يستغرقه تنفيذ هذه التعليمات يمسى UserProcessorTime

وبالنسبة للoperating system core و application portion لازم تعرف إن أي برنامج له Two stacks واحد في جزء البرنامج الخاص فيه في الذاكرة وهذا هو application portion وواحد في جزء الـــ kernel وهذا هو operating system core

وأخيراً بالنسبة لإختلاف وقت التنفيذ بالنسبة لنفس البرنامج فتعتمد على ال pages وال Hit و الMiss وعلى CPU Schedule وخرابيط كثيرة

هذا والله أعلم ;)

#8

شكرا جزيلا لك اخي....

اذا كنت تعرف اي موقع (او مواقع) يشرح هذه الامور بالتفصيل رجاء وضعها هنا

تحياتي لك

:)

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…