,而我瞭解p訪問系統對象和查詢/調用我可以看到一些明顯的性能提升相比,使用.NET方法這是因爲它是查詢通過系統中的信息的DLL使用的PInvoke獲取有關過程
例如,通過在此代碼
[DllImport("psapi.dll", SetLastError = true)]
static extern bool GetProcessMemoryInfo(IntPtr hProcess, out PROCESS_MEMORY_COUNTERS Memcounters, int size);
我能得到有關問題的過程,所以我可能會問,我需要了解它的內存使用信息獲取導入DLL。
但正如我可以在該鏈接中注意到Win32_PerfFormattedData_PerfProc_Process和Win32_PerfRawData_PerfProc_Process似乎我可以訪問一個沒有被P/invoke使用的類並查詢非常特定的信息。
uint64 IODataOperationsPerSec;
uint64 IOOtherOperationsPerSec;
uint64 IOReadBytesPerSec;
uint64 IOReadOperationsPerSec;
uint64 IOWriteBytesPerSec;
uint64 IOWriteOperationsPerSec;
uint64 IODataBytesPerSec;
uint64 IOOtherBytesPerSec;
uint32 PageFaultsPerSec;
uint64 PageFileBytes;
uint64 PageFileBytesPeak;
兩個32位/ 64位,你可以看到,這裏還分離功能的處理
所以在這裏,我可以肯定知道,那我得到正是我需要查詢,然後我注意到,我可以通過該課程獲得我需要的所有內容,我可以在.net中找到所需的所有內容。我猜想(wmi),但我正在尋找那個,一個爲1的課程,我一定知道我正在正確查詢32位任務和64位任務和2個計數器都在一個類中,I/O
,CPU Time
,Memory usage
和性能問題,它是一個相當不可忽視的性能增益相比,使用.net a方法。
所以問題是:
我怎麼通過使用像P /調用,而不是自己的.NET類的方法可以訪問這門課嗎?
實際上,我發現有關託管.net的計數器最有趣的鏈接是This Link,我想這等價於上面的win32鏈接。
您不使用獲取該信息的pinvoke,而是使用System.Management命名空間中的類。 WMI的薄包裝。使用[此實用程序](http://www.microsoft.com/en-us/download/details.aspx?id=8572)進行實驗,也會生成您需要的C#代碼。任何你認爲你從頭腦中看到的性能優勢都只存在於你的想象中。 –
與@HansPassant同時出現 - 「System.Management」命名空間中的WMI包裝是這裏的方法。 – JerKimball
@JerKimball感謝您的信息,我會檢查這個選項,我想我已經認爲它不是與pInvoke去的方式.. – LoneXcoder