2015-01-19 8 views
7

Siehe zum BeispielSoll man Dispose für Process.GetCurrentProcess() aufrufen?

How to get the current ProcessID?

Niemand Entsorgen Sie für ein Objekt von System.Diagnostics.Process.GetCurrentProcess() zurückrufen gestört. Soll es tatsächlich heißen? Bitte erläutern Sie warum.

+4

Einfach: Wenn 'IDisposable' implementiert ist, rufen Sie 'Dispose' auf. Es kann einen nicht verwalteten Speicher oder eine andere Ressource enthalten oder nicht, Sie kennen die aktuelle Implementierung einfach nicht, also tun Sie es. – Samuel

+2

Sie müssen es nicht anrufen. Du hast also eine Ja und eine Nein Antwort, du weißt immer noch nichts. Stellen Sie diese Frage nicht. Sie können entweder immer entsorgen, Sie werden sich nie irren. Oder du verbringst eine Minute damit, eine kleine Test-App zu schreiben, die das hundert Millionen Mal tut. Jetzt kennst du die wahre Antwort. –

Antwort

3

Ja, und eigentlich ist es auch wichtig. Wenn Sie die tatsächliche source sehen, werden Sie sehen, dass die Dispose nicht nur von Component vererbt wird, tut es auch etwas.

Es scheint mir, mit Blick auf den Code, dass es am wichtigsten ist, wenn EnableRaisingEvents auf true festgelegt ist, da das Erstellen eines Wait Handle beinhaltet. Dieser Handle muss freigegeben werden, um Speicher zu verhindern und Lecken zu vermeiden.

+0

Es gibt kein Leck. Eine verzögerte Freigabe eines Wait-Handle ist ziemlich unschuldig, sie sind das billigste OS-Objekt, das Sie zuordnen könnten. Auch ziemlich unwahrscheinlich, dass er das Exited-Event für seinen eigenen Prozess abonniert hat;) –

+0

@HansPassant: Ich schätze, der Link war nur ein Beispiel. Wenn Sie mit Griffen eine schwere Verarbeitung durchführen, könnten Sie diese nicht mehr verwenden. Und das ist auch egal, Sie sollten 'Dispose' aufrufen, wenn das Objekt' IDisposable' implementiert. –

+1

Das ist der Cargo-Kult-Ansatz. Es gehört nicht wirklich zu einer Site wie SO. Aber schwer loszuwerden. –