gdy dowiaduję się o p/wywołać mogłem zobaczyć jakieś zauważalne wzrost wydajności w porównaniu z wykorzystaniem metod .net to dlatego, że jest odpytywanie informacji za pośrednictwem systemów plików DLLKorzystanie pinvoke aby uzyskać dostęp do obiektów systemowych i zapytanie o procesie
na przykład poprzez importowanie biblioteki dll w tym kodzie
[DllImport("psapi.dll", SetLastError = true)]
static extern bool GetProcessMemoryInfo(IntPtr hProcess, out PROCESS_MEMORY_COUNTERS Memcounters, int size);
mogę uzyskać dostęp do informacji dotyczących danego procesu, więc może kwestionować wszystko, co trzeba wiedzieć o jego zużycie pamięci.
Ale jak mogłem zanotować w tym linku The Win32_PerfFormattedData_PerfProc_Process i Win32_PerfRawData_PerfProc_Process wydaje się, że mogę uzyskać dostęp do klasy, która nie jest używana przez P/invoke i zapytanie o bardzo konkretne informacje.
uint64 IODataOperationsPerSec;
uint64 IOOtherOperationsPerSec;
uint64 IOReadBytesPerSec;
uint64 IOReadOperationsPerSec;
uint64 IOWriteBytesPerSec;
uint64 IOWriteOperationsPerSec;
uint64 IODataBytesPerSec;
uint64 IOOtherBytesPerSec;
uint32 PageFaultsPerSec;
uint64 PageFileBytes;
uint64 PageFileBytesPeak;
jak widać, nie jest również oddzielne funkcje zarówno 32bit/64bit przetwarza
Więc mogę wiedzieć na pewno, że jestem coraz dokładnie to, czego potrzebuję do kwerendy i wtedy zauważyłem, że mógłbym dostać wszystko, czego potrzebuję dzięki tej klasy, co udało mi się znaleźć w .NET równoważne jedną chyba (WMI), ale szukałem właśnie to, że dla klasy 1, będę na pewno wiedzą, że jestem zapytań zadania prawidłowo 32-bitowe zadania i 64bit i 2 liczniki są razem w jednej klasie, I/O
, CPU Time
, Memory usage
i kwestii wydajności, że jest to dość notisble wzrost wydajności w porównaniu z wykorzystaniem .NET Pproach.
Więc pytanie brzmi:
jaki sposób uzyskać dostęp do tej klasy za pomocą metody jak P/Invoke, a nie własnych klas .NET?
I rzeczywiście najciekawszy link, jaki znalazłem odnośnie do liczników zarządzanych .net w szczegółach to This Link, myślę, że jest to odpowiednik linków powyżej win32.
Nie używać pinvoke że uzyskać te informacje, należy użyć klas w przestrzeni nazw System.Management. Cienkie opakowania dla WMI. Użyj [tego narzędzia] (http://www.microsoft.com/en-us/download/details.aspx?id=8572) do eksperymentu, generuje również potrzebny kod C#. Każda perfekcyjna korzyść, którą uważasz, że widzisz z Pinvoke, istnieje tylko w Twojej wyobraźni. –
zgodzić się z @HansPassant - owinięcie WMI w 'nazw System.Management' jest do zrobienia tutaj. – JerKimball
@JerKimball dzięki za informacje i sprawdzi, czy opcja Chyba już zorientowali jej nie droga z pinvoke .. – LoneXcoder