2012-01-26 27 views
7

Możesz użyć programu Process Explorer, aby sprawdzić, ile uchwytów posiada uruchomionych aplikacji. Czy jest jakiś sposób na kod Delphi, aby uzyskać ten numer? Jestem zainteresowany śledzeniem numeru dla samej aplikacji; aby nie znaleźć liczby uchwytów używanych przez inne aplikacje, jak robi to Eksplorator procesów.Jak uzyskać liczbę otwartych uchwytów, które należą do określonego procesu?

Moim zamiarem jest aplikacja do śledzenia/wykrywania ewentualnych wycieków zasobów.

Odpowiedz

12

Użyj funkcji GetProcessHandleCount. Ta funkcja API jest w ostatnich wersjach Delphi importowanych przez Winapi.Windows jednostki (więc można pominąć przedstawiony jeden):

function GetProcessHandleCount(hProcess: THandle; var pdwHandleCount: DWORD): BOOL; stdcall; 
    external 'kernel32.dll'; 

procedure TForm1.Button1Click(Sender: TObject); 
var 
    HandleCount: DWORD; 
begin 
    if GetProcessHandleCount(GetCurrentProcess, HandleCount) then 
    ShowMessage('Handle count: ' + IntToStr(HandleCount)); 
end; 
+1

działa dobrze. Użyłem tego do wykrycia wycieków zasobów spowodowanych przez nie wywoływanie 'Socket.Close()', gdy wystąpi błąd połączenia sieciowego. – AlainD

Powiązane problemy