السلام عليكم
هل يعرف احدكم طريقة لعمل timer على مستوى الميكروثانية
مثلا لاستخدامه لقياس سرعة تنفيذ الكود مثلا
تحياتي
:)
السلام عليكم
هل يعرف احدكم طريقة لعمل timer على مستوى الميكروثانية
مثلا لاستخدامه لقياس سرعة تنفيذ الكود مثلا
تحياتي
:)
اقتباسمثلا لاستخدامه لقياس سرعة تنفيذ الكود مثلا
لست مضطرا للإنشاء Timer يكفي استخدام الخاصية Environment.TickCount لمعرفة الوقت المنقضي يمكنك خزن القيمتين قبل التنفيذ وبعد التنفيذ ثم طرحها من بعضهما البض
اقرأ : /index.php?showtopic=82374
هذا رائع ... شكرا لكم جميعا
السلام عليكم
عندما نفذت الكود التالي و جدت ان قيمة المتغير 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);
وهذا والله اعلم
تحياتي
:)
شباب هل لدى احدكم تفسير على الاتي:
في كل مرة انفذ الكود اعلاه احصل على قيمة مختلفة للمتغير 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
تحياتي
:)
يوجد في نظام التشغيل شئ إسمه 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 وخرابيط كثيرة
هذا والله أعلم ;)
شكرا جزيلا لك اخي....
اذا كنت تعرف اي موقع (او مواقع) يشرح هذه الامور بالتفصيل رجاء وضعها هنا
تحياتي لك
:)
هذا الموضوع مغلق.
المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية
جارٍ التحقق من المتواجدين…