不退訂c#中的事件可能會有多嚴重? 是強制還是可取的行動?是否需要取消訂閱活動?
19
A
回答
18
這是從MSDN documentation的重要組成部分,你應該考慮
要防止事件處理程序從 當事件是 提出被調用,只需從 事件退訂。爲了防止資源泄漏,在處理用戶對象之前,從事件中取消訂閱 是很重要的。直到您 取消訂閱事件,發佈對象中位於 事件之下的 多播委託對 封裝訂閱者事件 處理程序的代理的引用具有 引用。 只要發佈 對象擁有該引用,您的 訂戶對象將不會收集垃圾 。
3
這取決於訂閱者和發佈者的生活時間。這裏是關於這個問題的深度文章以及如何在這裏解決它的幾種方法:Solving the Problem with Events: Weak Event Handlers
2
重要的是取消訂閱事件。如果你不這樣做,那麼訂閱者不能被垃圾收集,實質上就是內存泄漏。以下是你可能會遇到,如果你不退訂的問題,一個很好的例子:
http://developers.slashdot.org/article.pl?sid=07/11/17/0552247
此外,它可能會導致性能問題的事件處理程序將繼續調用,即使它不是做對你有用的東西了。
另一方面,如果您剛剛結束程序的執行,那麼沒有理由退訂事件。這當然不是強制性的,我不認爲有任何理由推薦它。
相關問題
- 1. 動態訂閱/取消訂閱活動
- 2. 取消訂閱/訂閱活動危險?
- 3. 訂閱和取消訂閱活動
- 4. 我是否需要在asp.net中取消訂閱(手動訂閱)事件?
- 5. 檢測訂閱是否自動取消
- 6. 我們是否需要取消訂閱完成/出錯的observable?
- 7. 我需要取消訂閱嗎BoundNodeCallbackObservable
- 8. 如何正確取消訂閱活動
- 9. 我應該取消訂閱活動嗎?
- 10. Magento - 沒有通訊訂閱和取消訂閱活動
- 11. 我是否需要MSDN訂閱
- 12. RHEL7 docker容器是否需要訂閱?
- 13. 是否有API取消自動續訂訂閱?
- 14. 如何知道自動續訂訂閱是否被取消?
- 15. TypeError:'builtin_function_or_method'對象是否取消訂閱?
- 16. 訂閱取消訂閱()
- 17. 我是否需要取消訂閱c#metro應用程序中的事件?
- 18. 取消訂閱範圍內的所有活動是否安全$ destroy?
- 19. 當我在wpf中關閉窗口時,是否必須取消訂閱活動?
- 20. Angular 2 - 訂閱FormControl的valueChanges是否需要退訂?
- 21. 訂閱Spotify活動
- 22. 我們是否需要提醒用戶有關自動續訂訂閱過期?
- 23. C#UI事件取消訂閱 - 必要?
- 24. 取消iOS訂閱
- 25. Android訂閱取消
- 26. 如何取消訂閱socket.io訂閱?
- 27. Rxjs - 重新訂閱取消訂閱Observable
- 28. 如何取消訂閱Weak訂閱MvvmCross
- 29. 訂閱/取消訂閱VS Create/TakeUntil?
- 30. 如何取消訂閱NServiceBus訂閱?