Die GC nicht über etwas anderes als Speicher schert, wenn Sie also habe viel Speicher und konsumiere nicht viel davon, es könnte sehr lange dauern, bis es einen GC macht. Während dieser ganzen Zeit bleiben die nicht verwalteten Ressourcen, wie Netzwerkverbindungen, Dateihandles, Datenbankverbindungen, Grafikhandles usw., durch die Objekte, die darauf warten, erfasst zu werden, gebunden. Dies kann dazu führen, dass Ihnen diese Ressourcen ausgehen und der GC wird sich nicht mehr bewusst sein, da nicht verwaltete Ressourcen nicht überwacht werden.
Wenn Sie also Ihren Code in eine Schleife einfügen und ihn aufrufen, ohne Dispose aufzurufen, verschlechtert sich möglicherweise die Leistung (Prozesse, die um knappe Ressourcen kämpfen) oder eine Ausnahme aufgrund fehlender nicht verwalteter Ressourcen . Es hängt vom Kontext ab, wie es aufgerufen wird und wie Sie andere verwandte Objekte erstellen. Anstatt jede Situation zu analysieren, ist es immer am sichersten, Dispose aufzurufen, sobald Sie mit der Instanz fertig sind.
Es stimmt, dass Dispose vom GC für ein Objekt aufgerufen wird, das den Gültigkeitsbereich verlassen hat oder nicht mehr referenziert wird, aber dies ist indeterministisch. Da sie indeterministisch sind, könnten Sie unterschiedliche Ergebnisse sehen, wie schnell Ressourcen beim Testen gegen die Produktion frei werden und zu zufälligen Ausnahmen führen, wenn Ressourcen nicht zugewiesen werden, wenn sie verbraucht sind. Wenn Sie zwischen konsistentem deterministischem Verhalten Ihrer Anwendung und indeterministischem Verhalten wählen könnten, würden Sie wahrscheinlich deterministisch sein wollen, es sei denn, Sie versuchen vielleicht, Ihre Tester zu verwirren.
Ich denke, dass Sie den Punkt hier verpasst haben: Wie Sie auf der zweiten Option sehen können, sollte ich es so schreiben: request.GetResponse(); Rückkehr wahr; Wie Sie sehen können, ist es mir egal, was in der GetResponse zurückkehrt und es vollständig ignorieren. In Bezug auf die Verwendung Funktionalität, ich bin mir völlig bewusst, ich war mir nicht sicher, ob es einen zusätzlichen Vorteil des Hinzufügens der Verwendung hier gibt, können Sie nicht einmal die Antwort kümmern. ich hoffe, ich habe es geklärt. –
@Or A: Egal, ob Sie sich für die Antwort interessieren oder nicht, Sie rufen immer noch 'GetResponse' an, was bedeutet, dass das zurückgegebene Objekt noch entsorgt werden muss. (Und das empfohlene Muster dafür wäre normalerweise ein "using" -Block.) – LukeH
@LukeH: In diesem seltsamen Kontext ist es wahrscheinlich in Ordnung, eine '.Dispose(); –