يمكن برنامج C# يقيس استخدام وحدة المعالجة المركزية بطريقة أو بأخرى ؟

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

سؤال

أنا أعمل على خلفية البرنامج الذي سوف تكون قيد التشغيل لفترة طويلة ولدي الخارجية برنامج تسجيل (SmartInspect) أن أريد أن إطعام مع بعض القيم بشكل دوري ، من أجل رصد في الوقت الحقيقي عند التصحيح.

وأنا أعلم أنني يمكن ببساطة النار حتى برامج متعددة ، مثل مدير المهام أو IARSN TaskInfo ، ولكن أود أن تبقي كل شيء في بلدي برنامج هذا كما يريد إضافة بعض القواعد البسيطة مثل إذا كان البرنامج يستخدم أكثر من% X وحدة المعالجة المركزية ، العلم هذا في السجل.

لدي خلفية الموضوع دوريا يغذي بعض الإحصاءات إلى SmartInspect مثل استهلاك الذاكرة, مجموعة العمل, إلخ.

هل من الممكن هذا الموضوع إلى الحصول على قدر معقول من الدقة قياس مقدار وحدة المعالجة المركزية للكمبيوتر الموارد يستهلك ؟ البرنامج الرئيسي هو ترابط واحد التطبيق (وبصرف النظر عن الوكالة الدولية للطاقة الموضوع أن سجلات الإحصاءات) حتى إذا تقنية محدودة كم خيط واحد استخدام ثم من شأنها أن تكون جيدة جدا.

لقد وجدت بعض الإدخالات ذات الصلة إلى ما يسمى rusage لينكس و C.هل هناك شيء مماثل يمكنني استخدام هذا ؟


تحرير: حسنا, لقد حاولت عداد الأداء الطريقة ، لكنه أضاف الكثير جدا من GC-البيانات في كل مرة دعا ، وبالتالي فإن الرسم البياني استخدام الذاكرة وجمع القمامة ارتفعت.اعتقد انني سوف اترك هذا الجزء الآن.

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

المحلول

يمكنك أيضا استخدام النظام.تشخيص.العملية.TotalProcessorTime و النظام.تشخيص.ProcessThread.TotalProcessorTime خصائص لحساب استخدام المعالج هذا المادة يصف.

نصائح أخرى

وإلقاء نظرة على System.Diagnostics.PerformanceCounter. إذا قمت بتشغيل ما يصل perfmon.exe، سترى مجموعة من عدادات الأداء المتوفرة لديك (مجموعة 'الكائن الأداء' إلى 'عملية')، واحدة منها هو '٪ وقت المعالج.

ويمكنك من خلال الطبقة System.Diagnostic.PerformanceCounter. وإليك مثال على شخص مراقبة استخدام وحدة المعالجة المركزية:

<وأ href = "http://blogs.msdn.com/dotnetinterop/archive/2007/02/02/system-diagnostics-performancecounter-and-processor-time-on-multi-core-or-multi- cpu.aspx "يختلط =" نوفولو noreferrer "> http://blogs.msdn.com/dotnetinterop/archive/2007/02/02/system-diagnostics-performancecounter-and-processor-time-on-multi-core-or المتعدد cpu.aspx

لاحظ أن هذا لا تتطلب امتيازات مرتفعة. وربما تكون هناك ضربة أداء استخدامه.

وإنه لأمر جيد أن تقوم بتسجيل الدخول لمراقبي مثل smartinspect. لكن النوافذ نفسها تجمع البيانات لكل مورد في هذه الحالة البرنامج (أو عملية). WMI هو المعيار لمراقبة التطبيق. يمكننا عرض البيانات التي تم التقاطها بواسطة WMI. كثير إدارة التطبيقات، والمراقبة الصحية أو أدوات الرصد applicaiton دعم WMI من خارج منطقة الجزاء.

وهكذا وأنا لا ننصح أن تسجيل استخدام وحدة المعالجة المركزية الخاصة بك ضمن التطبيق إلى ملف السجل.

إذا كنت تعتقد التوافر والأداء أمر بالغ الأهمية ثم يذهب لحلول مثل إدارة العمليات Microsoft حل.

لتكوين فكرة حول WMI وللحصول على قائمة من عملية انظر أدناه:  - Win32_PerfFormattedData_PerfProc_Process للحصول على وقت وحدة المعالجة المركزية، المرشح processID انظر هذه المقالة  - يمكنك الحصول على processID من الدرجة Win32_process

WMI سهلة لC # كيفن ماثيو جوس

oConn.Username = "JohnDoe";
oConn.Password = "JohnsPass";

System.Management.ManagementScope oMs = new System.Management.ManagementScope("\\MachineX", oConn);    

//get Fixed disk stats
System.Management.ObjectQuery oQuery = new System.Management.ObjectQuery("select FreeSpace,Size,Name from Win32_LogicalDisk where DriveType=3");

//Execute the query 
ManagementObjectSearcher oSearcher = new ManagementObjectSearcher(oMs,oQuery);

//Get the results
ManagementObjectCollection oReturnCollection = oSearcher.Get();   

//loop through found drives and write out info
foreach( ManagementObject oReturn in oReturnCollection )
{
    // Disk name
    Console.WriteLine("Name : " + oReturn["Name"].ToString());
    // Free Space in bytes
    Console.WriteLine("FreeSpace: " + oReturn["FreeSpace"].ToString());
    // Size in bytes
    Console.WriteLine("Size: " + oReturn["Size"].ToString());
} 

ويمكنك مراقبة عملية من النظام البعيد أيضا.

وتوضح هذه المقالة مشروع قانون كيفية استخدام عالية الأداء الموقت:

http://www.codeproject.com/KB/cs/highperformancetimercshar.aspx

ويمكنك استخدامه لآخر تنفيذ التعليمات البرمجية.

وهنا يمكنك العثور على عدد من المصادر المفتوحة C # المحللون:

http://csharp-source.net/open-source/profile

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