ما هي أفضل طريقة لقياس أداء البرامج في نظام التشغيل Windows؟

StackOverflow https://stackoverflow.com/questions/145103

سؤال

أحتاج إلى إجراء بعض قياسات الأداء على برامج .NET (C#) في Windows، لكنني لم أقم بالكثير من قياس الأداء في عالم Windows.لقد بحثت في استخدام شاشة أداء Windows 2000/XP مع عدادات مخصصة لهذا الغرض، ولكن لا أعتقد أن هذا هو ما أريده تمامًا.

هل توجد أي مرافق نظامية جيدة للقيام بذلك في نظام التشغيل Windows XP، أم أنني بحاجة فقط إلى استخدام System.Diagnostics.Stopwatch [تحرير] وكتابة سجلات نصية للتفسير اليدوي، أم أن هناك شيئًا آخر؟

يحرر:هل هناك أي شيء أبعد من ذلك System.Diagnostics.Stopwatch?

هل كانت مفيدة؟

المحلول

بالنسبة لقياس الأداء الدقيق، فأنا أحب MeasureIt حقًا (يمكن تنزيله من http://msdn.microsoft.com/en-us/magazine/cc500596.aspx).إنه مشروع اختباري كتبه فانس موريسون، مهندس الأداء في CLR.يحتوي حاليًا على مجموعة جيدة من المعايير لعدد من الأساليب الأساسية لـ .Net/CLR.أفضل ما في الأمر هو أنه من السهل تعديل وإضافة معايير جديدة لأي شيء ترغب في اختباره.ما عليك سوى تشغيل "MeasureIt /edit" وسيقوم بتشغيل VS مع المشروع لنفسه حتى تتمكن من عرض كيفية كتابة تلك المعايير وإضافة معايير جديدة بطريقة مماثلة إذا أردت.

كما ذكرنا سابقًا، ربما تكون StopWatch هي الطريقة الأسهل للقيام بذلك، ويستخدم MeasureIt StopWatch أدناه لمعرفة توقيتاته ولكنه يقوم أيضًا ببعض الأشياء الأخرى مثل تشغيل مجموعة من التعليمات البرمجية X مرات ثم توفير إحصائيات لعمليات التشغيل وما لا.

نصائح أخرى

using System.Diagnostics;
....

Stopwatch sw = new Stopwatch();

sw.Start();

// Code you want to time...

// Note: for averaged accuracy (without other OS effects), 
//       run timed code multiple times in a loop 
//       and then divide by the number of runs.

sw.Stop();

Console.WriteLine("Took " + sw.ElapsedTicks + " Ticks");

إذا كنت تريد فقط بعض الأرقام السريعة، فيمكنك استخدام Powershell لتحديد وقت التنفيذ الإجمالي.استخدم الأمر cmdlet لأمر القياس.إنه يعادل تقريبًا "الوقت" في نظام Unix.

> measure-command { your.exe arg1 }

Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 4
Milliseconds      : 996
Ticks             : 49963029
TotalDays         : 5.78275798611111E-05
TotalHours        : 0.00138786191666667
TotalMinutes      : 0.083271715
TotalSeconds      : 4.9963029
TotalMilliseconds : 4996.3029

هناك عدد غير قليل من ملفات التعريف هناك.فيما يلي بعض من أعرفهم:

إذا واصلت استخدام System.Diagnostics.Stopwatch، فستكون قادرًا على قياس وقياس نقاط معينة فقط من التعليمات البرمجية الخاصة بك، حيث تضع بشكل واضح زر البدء/الإيقاف.يعد هذا جيدًا بما يكفي لقياس أجزاء معينة، مثل حلقة ضيقة أو أشياء من هذا القبيل، لكنه لن يعطيك صورة كاملة عن المكان الذي يقضي فيه برنامجك معظم وقته.

قد لا يكون هذا ما تريد، ولكن com.dotTrace يقدم العديد من التشخيصات المفيدة وهو مدمج في Visual Studio.

إذا كان مشروعك كبيرًا جدًا وكان هناك الكثير من الوحدات التي تقوم بعدد كبير من المكالمات، فيمكنك:http://www.moduleanalyzer.com/

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top