webentwicklung-frage-antwort-db.com.de

Was nützt IHttpHandler.IsReusable?

Ich schreibe ein IHttpHandler und muss eine IsReusable -Eigenschaft implementieren. Wenn ich mir die MSDN-Dokumentation ansehe heißt es:

Ruft einen Wert ab, der angibt, ob eine andere Anforderung die IHttpHandler-Instanz verwenden kann.

Das ist nicht sehr hilfreich. In welchen Situationen sollte ich einen wiederverwendbaren Handler verwenden und in welchen Situationen sollte er nicht wiederverwendbar sein?

Folgefragen:

  1. Was ist Wiederverwendung?
  2. Kann ich den Status (d. H. Klassenvariablen) beibehalten, wenn Reusable = true ??
101
Kees C. Bakker

Diese Eigenschaft gibt an, ob mehrere Anforderungen mit derselben IHttpHandler-Instanz verarbeitet werden können. Standardmäßig werden am Ende einer Anforderungspipeline alle http-Handler, die in der handlerRecycleList der HttpApplication abgelegt sind, auf null gesetzt. Wenn ein Handler wiederverwendbar ist, wird er nicht auf null gesetzt und die Instanz wird bei der nächsten Anforderung wiederverwendet.

Der Hauptgewinn ist die Leistung, da weniger Objekte beim Sammeln von Müll anfallen.
Der wichtigste Schmerzpunkt für wiederverwendbare Handler ist, dass sie threadsicher sein müssen. Dies ist nicht trivial und erfordert einige Anstrengungen.

Ich persönlich schlage vor, dass Sie das Standardverhalten (nicht wiederverwendbar) beibehalten, wenn Sie nur verwaltete Ressourcen verwenden, da der Garbage Collector diese problemlos verarbeiten sollte. Der Leistungsgewinn von wiederverwendbaren Handlern ist im Vergleich zum Risiko, schwer zu findende Threading-Fehler einzuführen, normalerweise vernachlässigbar.

Wenn Sie den Handler wiederverwenden möchten, sollten Sie vermeiden, den Status in Klassenvariablen beizubehalten, da beim gleichzeitigen Zugriff auf die Handlerinstanz mehrere Anforderungen die Werte schreiben/lesen.

Anscheinend hält dies den Handler im Speicher und kann mehrere Anforderungen verarbeiten. Bei false muss für jede eingehende Anforderung eine neue Instanz des Handlers erstellt werden.

Hier ist eine Frage, die zeigt, was passiert, wenn es nicht richtig verwendet wird:

Streaming datenbasierter Bilder mit HttpHandler

11
IrishChieftain

Es ist billiger, den Handler zu recyceln, als ihn jedes Mal neu zu installieren, wenn eine Anforderung eingeht und der Server weniger Arbeitsspeicher benötigt, was die Arbeit erleichtert, die der GC ausführen muss. Wenn sich der Handler in einem Zustand befindet, in dem die Bearbeitung einer neuen Anforderung kein Problem darstellt (d. h. jeder Zustand in der Handlerinstanz wurde zurückgesetzt)Dann sollte es als wiederverwendbar gelten.

BEARBEITEN

Ich bin nicht sicher, ob meine Antwort die Wiederverwendung korrekt definiert. Tatsächlich ist eine gleichzeitige Wiederverwendung möglich, sodass der Status am besten vermieden oder auf thread-sichere Weise sorgfältig verwaltet werden kann.

5
spender