2017-02-20 24 views
1

我有一個IDisposable類A.我需要在B類的另一個方法M中使用A的對象。方法M被調用多次(每天百萬次)。我應該使用M內部的A的本地對象並配置一次,還是應該在B內部聲明類級別的靜態成員,並在應用程序結束後進行配置。 如果我不清楚,請告訴我。整個應用程序的一個對象或每次調用一個對象+處理

+0

爲什麼B不能在構造函數中使用A實例並根據需要將其提供給M,然後B在完成後就可以將其摧毀?一個對象負責清除它通過公共接口提供的資源,除非該接口是工廠方法或構造函數,在這種情況下調用者負責。 – hoodaticus

+0

對M的每個調用都是通過B的新實例進行的。 –

+1

假設它是線程安全的,像單例那樣的聲音在這裏是合適的。 – hoodaticus

回答

1

該應用程序的一個對象是Singleton;雖然它們在特定情況下很有用,但它們通常不是一個好主意。詳細解釋原因見this question

實現IDisposable的類最好在using聲明的範圍內使用,該聲明將負責爲您處理它。

明確的例外情況是,在單個業務操作的上下文中需要多次調用一次性類時 - 並且該操作分散得太多以致無法包裝在using聲明中。在這種情況下,將所有呼叫包裝到第一個作爲私人成員的第二個一次性類中。當第二類處置時,它應該處置任何一次性的私人成員。

+0

調用類B的方法M來源於B的多個實例。 像下面一樣 B b = new B() b.M() 我不會看到使B一次性使用的一點。 –

+0

另一個非顯而易見的情況是,實現'IDisposable'的類應該在應用程序的整個生命週期內被保留,而不是在'using'中被使用的情況是'HttpClient'。更多信息可以在這裏找到(https://aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/)。 –

+0

@BradleyUffner這是我腦海中最突出的例子,使我無法從絕對的角度講話。 –

相關問題