Ich habe eine IDisposable Klasse A. Ich muss ein Objekt von A innerhalb einer anderen Methode M der Klasse B verwenden. Methode M wird mehrmals aufgerufen (Millionen mal pro Tag)). Sollte ich das lokale Objekt von A innerhalb von M verwenden und einmal disponieren oder sollte ich ein statisches Mitglied auf Klassenebene in B deklarieren und entsorgen, sobald die Anwendung endet. Lassen Sie mich wissen, wenn ich nicht klar bin.Ein Objekt für die gesamte Anwendungslebensdauer oder ein Objekt pro Aufruf + dispose
Antwort
Ein Objekt für die Lebensdauer der Anwendung ist ein Singleton; Während sie unter bestimmten Umständen nützlich sind, sind sie im Allgemeinen keine gute Idee. Eine genaue Erläuterung des Grundes finden Sie unter this question.
Klassen, die IDisposable
implementieren, werden am besten innerhalb der Grenzen einer using
Anweisung verwendet, die sich darum kümmert, sie für Sie zu entsorgen.
Die eindeutige Ausnahme ist, wenn mehrere Aufrufe der Disposable-Klasse im Kontext einer einzelnen Geschäftsaktion benötigt werden - und diese Aktion zu weit verbreitet ist, um in eine using
-Anweisung eingebettet zu werden. In diesem Fall werden alle Aufrufe in eine zweite wegwerfbare Klasse verpackt, die die erste als privates Mitglied hat. Wenn die zweite Klasse entsorgt wird, sollte sie über private Mitglieder verfügen, die wegwerfbar sind.
Aufrufe an Methode M der Klasse B, die von mehreren Instanzen von B stammt. Wie unten B b = neu B() b.M() Ich sehe keinen Punkt, um B verfügbar zu machen. –
Ein weiterer nicht offensichtlicher Fall, bei dem eine Klasse, die 'IDisposable 'implementiert, für die Lebensdauer der Anwendung gehalten werden sollte, und nicht innerhalb eines' using' verwendet wird, ist' HttpClient'. Weitere Informationen finden Sie [hier] (https://aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/). –
@BradleyUffner das war das prominenteste Beispiel in meinem Kopf, das mich davon abhielt absolut zu sprechen. –
- 1. Rufe ich ein .NET-Objekt oder ein COM-Objekt an?
- 2. Standardfunktion für ein Objekt?
- 3. Objekt dispose in IDisposable Klasse
- 4. Jeder für ein Objekt?
- 5. Stenografie für eine Methode für ein Objekt in F # Aufruf
- 6. Funktioniert KeyValueDiffers von DoCheck nur für ein Objekt pro Komponente?
- 7. Erstellen Sie ein benutzerdefiniertes Objekt Aufruf
- 8. Ein großes Objekt oder mehrere kleine
- 9. Ein Objekt an ein anderes Objekt anhängen
- 10. ein Objekt an ein anderes Objekt initialisieren
- 11. Entity Framework GroupBy ein Objekt oder ComplexType
- 12. Erweiterungsmethoden für ein statisches Objekt
- 13. Objekt verwenden, haben Sie wie folgt ein Code nach der Methode von Einweg-Objekt nach dispose
- 14. Die spezifischste Unterklasse für ein Java-Objekt?
- 15. Aufruf einer Methode für ein Objekt einer anderen Klasse ohne
- 16. Aufruf mehrere Methoden für ein Objekt mehrere Werte
- 17. Set Breite: 100% in Bezug auf ein anderes Objekt für ein Objekt, die
- 18. Ein Objekt für Mausereignisse "transparent" machen?
- 19. JavaScript Object Definition ein String statt das gesamte Objekt zurückgeben
- 20. Django Besucherzähler für die gesamte Website/App nicht für ein bestimmtes Objekt
- 21. Polymer berechnet für ein Objekt
- 22. Django Serializer für ein Objekt
- 23. ein Objekt [] an ein params-Objekt übergeben [] funktioniert nicht
- 24. Wie ein [Objekt-Objekt] in ein Array zu verwandeln?
- 25. Warum schlägt diese SQL-Anweisung fehl? Aufruf an eine Mitgliedsfunktion bind_param() für ein Objekt ohne Objekt
- 26. Validieren Sie ein Objekt
- 27. Ein Repository pro Tabelle oder ein pro Funktionsabschnitt?
- 28. Ein DAO pro "Container" -Klasse oder ein DAO pro Tabelle?
- 29. s3 pro Objekt Ablauf
- 30. Wie ein Objekt (Klasse) ein Parameter für ein anderes Objekt (Klasse) in Ruby sein kann
Warum kann B nicht eine A-Instanz in seinem Konstruktor verwenden und sie bei Bedarf an M liefern, und dann kann B sie zerstören, wenn sie damit fertig ist? Ein Objekt ist verantwortlich für die Bereinigung von Ressourcen, die es über die öffentliche Schnittstelle bereitstellt, es sei denn, diese Schnittstelle ist eine Factory-Methode oder ein Konstruktor, in welchem Fall der Aufrufer verantwortlich ist. – hoodaticus
Jeder Aufruf von M ist durch neue Instanz von B. –
Sounds wie Singleton ist hier angebracht, vorausgesetzt, es ist Thread sicher. – hoodaticus