Próbuję obejść stare „Jak uzyskać licznik wydajności systemu Windows dla bieżącego procesu„problem. Zasadniczo jestem wyliczanie instancji obiektów procesu aby uzyskać listę obiektów Process, które mogę następnie zapytać o ich identyfikator procesu i porównać z własnymi.
Na tej podstawie mogę zbudować ścieżkę licznika wydajności przy użyciu poprawnego indeksu instancji (aby utworzyć coś podobnego do Process(my_program#3)<counter>
), którego mogę użyć do zapytania dowolnego licznika, który mnie interesuje. Ale co się stanie, jeśli jedno lub więcej innych wystąpień mojego_programu zakończy się przed PdhAddCounter połączenie? Jeśli dobrze rozumiem, oznacza to, że moja ścieżka licznika odnosi się teraz do innego procesu lub jest teraz nieprawidłowa. Mogą nawet zniknąć podczas zapytania o identyfikator procesu ...
Jak zapobiec utracie ważności ścieżki licznika, zanim będę mógł jej użyć do uzyskania uchwytu licznika?
Odpowiedzi:
0 dla odpowiedzi № 1Wow, masz rację. Wydaje mi się to poważną wadą projektową. Zasadniczo niemożliwe jest niezawodne monitorowanie wystąpienia, jeśli jego nazwa nie jest unikalna. Natknąłem się na obejście specjalnie dla obiektów Process i Thread, ale jest to ustawienie globalne, które może wpływać na inne aplikacje.
Myślę, że najbezpieczniejszym sposobem jest obejrzenie wszystkich obiektów procesu i za każdym razem, gdy zbierasz dane, przechodzisz i znajdujesz ten o pożądanym identyfikatorze procesu.