Warum ist es wichtig, einen WCF-Client-Proxy zu entfernen / zu schließen

7

Ich habe gehört, dass es wichtig ist, einen WCF-Client-Proxy selbst dann zu dispose (oder zu schließen), wenn

  • Sie verwenden keine Sitzungen
  • Es gibt keine nicht verwalteten Ressourcen, die deterministische Bereinigung benötigen (z. B. offene Sockets)

Wenn Sie beispielsweise BasicHttpBinding mit der Standard-Bindungskonfiguration verwenden, sollte dies auch auf einer populären Webseite funktionieren, richtig?

%Vor%

oder

%Vor%

Danke

    
ConfusedNoob 25.08.2011, 02:34
quelle

3 Antworten

3

Erstellen einer ChannelFactory & amp; Öffnen Sie es ist eine teure Operation und Sie sollten es vermeiden, es für jeden Anruf zu tun, wenn Sie die Leistung interessiert.

Ihr erster Anwendungsfall ist selbst mit basicHttpBinding nicht richtig, da er möglicherweise für jede Instanz eine neue Channelfactory erstellt. .NET 3.5 SP1 hat ein ChannelFactory-Caching eingeführt, damit Sie in bestimmten Szenarien in Ordnung sind.

Wenn Sie in Ihrem zweiten Anwendungsfall die Channelfactory zwischenspeichern und wiederverwenden, ist die Entsorgung nicht wirklich nesehrär, aber denken Sie daran, dass Sie / Ihr Einsatzleiter die Bindungszeit ändern können und ein Mangel an Schließung / Entsorgung enorme Auswirkungen haben kann.

Zusammenfassend ist es immer sicher zu schließen / zu disponentieren, und deshalb schlägt MSDN das vor.

    
zamd 25.08.2011, 09:56
quelle
15

Es ist gut zu üben Dinge zu schließen (und sie zu entsorgen), wenn Sie damit fertig sind. (Würden Sie einen Dateistream geöffnet lassen, obwohl Sie gerade durch / lesen / lesen)? Off-Hand kann ich ein paar Gründe sehen:

  1. Der Server (can / will) hat eine begrenzte Anzahl von aktiven Verbindungen, die er verwaltet. Je früher Sie über Ihren Service verfügen, desto schneller kann der nächste Client diesen Slot nutzen. (Warum warten Sie auf eine Auszeit, wenn Sie tatsächlich durch?)
  2. Vermeiden Sie den überschüssigen Overhead einer inaktiven Verbindung. Zugegebene Ressourcen sind heutzutage "reichlich", aber je weniger Overhead Sie halten, desto besser wird Ihre Leistung am Ende sein.
  3. Sie reduzieren das Risiko von Fehlern / Ausnahmebedingungen aufgrund von Zeitüberschreitung, indem Sie den Client abstellen, wenn er fertig ist.
  4. Indem Sie es schließen, wenn Sie fertig sind, halten Sie die Serverprotokolle effektiv sauber. Selbst wenn der Client es nicht anzeigt, kann der Server am Ende zu Timeout-Ausfällen führen, die aufgrund nicht funktionierender nicht funktionierender Verbindungen im Protokoll auftauchen.
  5. MSDN sagt zu (Beachten Sie das vierte Aufzählungszeichen in der WCF-Clientobjektliste).

Nur ein paar der Gründe, die mir in den Sinn kommen können.

    
Brad Christie 25.08.2011 02:43
quelle
2

Es hängt wirklich von der Art des Clients ab. Wenn Sie beispielsweise eine ASP.NET-Anwendung schreiben, die den Dienst aufruft, empfiehlt es sich, den Proxy zwischenzuspeichern, da dessen Erstellung teuer ist.

Wenn Sie mit einer IDisposable-Ressource fertig sind, sollten Sie sie entsorgen, damit das Objekt, das entsorgt wird, die freigegebenen Ressourcen freigeben kann, damit es aus dem Speicher entfernt werden kann. Wenn ein IDisposable-Objekt eine Close-Methode hat, sollte es zuerst aufgerufen werden.

Einen ausgezeichneten Artikel zu diesem faszinierenden Thema finden Sie hier: Ссылка

    
Philippe 25.08.2011 12:57
quelle

Tags und Links