我在遇到內存泄漏的應用程序時遇到問題。經驗告訴我,垃圾收集語言首先遇到內存泄漏的地方之一就是處理訂閱事件並且未能在稍後取消訂閱。第二個與存儲靜態有關。我是C#的新手,對於不透明的事件類型感到沮喪。你如何找出訂閱C#中的事件?
我們通過抽獎的運氣發現了一些雙重訂閱錯誤,但應用程序確實使用了很多事件。雖然我們很清楚取消訂閱您訂閱的所有內容的原則,但仍然存在內存泄漏。我想系統地確定訂閱什麼。
編輯:
感謝您的指針GetInvocationList()
方法。我正在嘗試創建一個將動態轉儲結果的調試工具。問題是我找到的解決方案在.Net 2中工作,但不再在.Net 3.5中。本質上,告訴你爲EventInfo(分別爲reflection,GetField和GetEvents)獲取相應的FieldInfo。但是,在.Net 3.5中沒有相應的FieldInfo,並且EventInfo不會讓我獲取調用列表。
我只想轉儲事件及其調用列表的調試目的列表。
看到我的回答,C#事件內存泄漏,上個月類似的問題。 – 2010-12-09 16:25:47
我很難選擇哪一個應該得到「官方」答案,因爲他們都滿足了我需要的不同部分。最後,我選擇了標題中回答問題的人,儘管n8wrl的答案在不同的方面同樣出色。 – 2010-12-10 13:30:18