2014-07-05 35 views
0

我有一個類MyClass,在構造函數(DI)中有一個MyThreadPool類型的參數。Singleton注入類 - 它會導致內存泄漏?

MyThreadPool是一個單身人士。該代碼是這樣的:

Public Class MyClass 
    Private _threadPool as MyThreadPool 

    Public Sub New(threadPool as MyThreadPool) 
     _threadPool = threadPool 
    End Sub 
End Class 

是否保持單身MyThreadPool在MyClass的私有字段(_threadPool)引起的MyClass任何實例留在內存中,併成爲非收藏用GC?

回答

2

沒有,因爲基準是從的MyThreadPoolMyClass實例的實例。這意味着MyClass的實例將使MyThreadPool的實例保持活動狀態,但不會相反。 MyThreadPool的實例沒有對MyClass實例的引用,所以它不能保持它的活動狀態。

想象垃圾收集器在引用後,探索它可以到達的每個對象。如果沒有任何對MyClass實例的引用,則它符合垃圾回收的條件。您不能從MyThreadPool「進入」MyClass的實例,所以沒關係。

+0

感謝喬恩......相關的問題是,如果MyClass有一個事件是由單例(全局應用程序級事件處理程序)中定義的事件處理程序處理的,它也不會導致內存泄漏,對嗎? – SamuelC

+1

@SamuelC:沒錯。但是,反過來,反過來也是一個問題 - 訂閱由單例(或靜態事件)聲明的事件可能導致泄漏。 –