2 Stimmen

PerThreadLifetimeManager in Unity

In der Unity PerThreadLifetimeManager Dokumentation habe ich gelesen, dass: " Dieser Lebenszeitmanager entsorgt die von ihm gehaltenen Instanzen nicht ". Verweis..: http://msdn.microsoft.com/en-us/library/ff647854.aspx

Wenn ich also einen ThreadPool verwende, bedeutet dies, dass Objekte, die mit Unity auf einem Thread des ThreadPools aufgelöst werden, am Ende der in diesem Thread durchgeführten Arbeit nicht entsorgt werden, bevor sie an den Pool zurückgegeben werden?

Jedes Muster oder Ideen, wie ich sicherstellen kann, dass die Objekte entsorgt werden und ich einen sauberen Thread aus dem Thread-Pool erhalten?

Danke!

2voto

Das hängt davon ab, was Typ des Managers auf Lebenszeit. Der PerThreadLifetimeManager verwaltet eine einzelne Instanz pro Thread. Es gibt sechs Typen von Lebenszeitmanagern, aber das bedeutet nicht, dass Sie nicht Ihre eigenen erstellen können, wenn sie Ihnen nicht zusagen.

Es scheint, als wollten Sie die TransientLifetimeManager die pro Aufruf eine neue Instanz bereitstellt. Sie können Resolve innerhalb Ihres Worker-Threads aufrufen, die Instanz verwenden und sie entsorgen, bevor die Methode beendet wird.

Ich bin mir nicht sicher, ob Sie einen Lebenszeitmanager erstellen können, der irgendwie automatisch weiß, dass Ihr Thread die Ausführung beendet hat. Der beste Weg, dies zu gewährleisten, ist die Erstellung eines Methoden-Wrappers, der 1) die Instanz von Unity abruft (mit dem TransientLifetimeManager), eine Action<T> (Ihre eigentliche Worker-Methode) ausführt, die Instanz übergibt und dann diese Instanz vor dem Beenden entsorgt. Dann würden Sie Ihren Code ausführen, indem Sie ihn an diesen Wrapper übergeben, der in einem Worker-Thread ausgeführt wird. Sie müssten Ihren Resolve()- und Dispose()-Code nur einmal schreiben und könnten ihn überall wiederverwenden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X