我有一個IDisposable類A.我需要在B類的另一個方法M中使用A的對象。方法M被調用多次(每天百萬次)。我應該使用M內部的A的本地對象並配置一次,還是應該在B內部聲明類級別的靜態成員,並在應用程序結束後進行配置。 如果我不清楚,請告訴我。整個應用程序的一個對象或每次調用一個對象+處理
回答
該應用程序的一個對象是Singleton;雖然它們在特定情況下很有用,但它們通常不是一個好主意。詳細解釋原因見this question。
實現IDisposable
的類最好在using
聲明的範圍內使用,該聲明將負責爲您處理它。
明確的例外情況是,在單個業務操作的上下文中需要多次調用一次性類時 - 並且該操作分散得太多以致無法包裝在using
聲明中。在這種情況下,將所有呼叫包裝到第一個作爲私人成員的第二個一次性類中。當第二類處置時,它應該處置任何一次性的私人成員。
調用類B的方法M來源於B的多個實例。 像下面一樣 B b = new B() b.M() 我不會看到使B一次性使用的一點。 –
另一個非顯而易見的情況是,實現'IDisposable'的類應該在應用程序的整個生命週期內被保留,而不是在'using'中被使用的情況是'HttpClient'。更多信息可以在這裏找到(https://aspnetmonsters.com/2016/08/2016-08-27-httpclientwrong/)。 –
@BradleyUffner這是我腦海中最突出的例子,使我無法從絕對的角度講話。 –
- 1. 每次創建一個新對象或保留一個對象
- 2. 每個應用程序應該只有一個EventSource對象嗎?
- 3. 如何爲多個對象使用一個處理程序?
- 4. 每個對象後處理
- 5. 每個對象計數一個對象
- 6. 如何擁有一個類或對象的「多」對象處理程序?
- 7. 僅對每個對象調用一次Struct構造函數
- 8. 調用處理每個圖形對象或只是'圖形'對象?
- 9. 對多個jQuery對象應用相同的處理程序
- 10. 我應該每次創建一個新對象還是創建一個對象?
- 11. 每個對象一個AutoreleasePool?
- 12. 多個WS調用一個動作,如何處理Promise對象?
- 13. 處理多個對象,如一個 - WPF
- 14. 調用一個非對象,實際上是一個對象
- 15. 如何從另一個對象調用一個對象?
- 16. 我應該定義一個函數來處理一個字符串對象或一個unicode對象嗎?
- 17. 哪種設計更好?單個對象或每次傳遞一個對象?
- 18. 使用多個mysqli對象或一個通用對象
- 19. 將對象從一個應用程序傳遞到另一個應用程序
- 20. 將對象從一個應用程序傳輸到另一個應用程序
- 21. Javascript應用方法從一個對象到另一個對象
- 22. 一個OnGestureListener對象可以處理兩個GestureDetector對象嗎?
- 23. iPhone應用程序:每秒創建一個對象
- 24. 我應該將PDO對象傳遞給每個對象,還是爲每個對象創建一個新對象?
- 25. 用另一個對象重寫Javascript整個日期對象
- 26. OpenGL基礎知識:每個對象調用一次glDrawElements
- 27. 一個int對於每個Python對象
- 28. 每當我打開一個nswindow - mac應用程序初始化一個對象
- 29. 如何創建一個對象,每個對象在每次使用時都會增加一個數字?
- 30. 如何在整個應用程序中使用對象的一個實例
爲什麼B不能在構造函數中使用A實例並根據需要將其提供給M,然後B在完成後就可以將其摧毀?一個對象負責清除它通過公共接口提供的資源,除非該接口是工廠方法或構造函數,在這種情況下調用者負責。 – hoodaticus
對M的每個調用都是通過B的新實例進行的。 –
假設它是線程安全的,像單例那樣的聲音在這裏是合適的。 – hoodaticus