你如何找到在C#中订阅活动的内容?

Ber*_*sch 11 c# debugging events

我遇到的问题是我正在处理的应用程序有内存泄漏.经验告诉我,垃圾收集语言遇到内存泄漏的第一个地方是处理订阅事件并且以后未能取消订阅它们.第二个与存储静态有关.我是C#的新手,并且对不透明的事件类型感到沮丧.

我们通过抽奖的运气获得了一些双重订阅错误,但应用程序确实将事件用于许多事情.虽然我们非常清楚取消订阅您订阅的所有内容的原则,但仍然存在内存泄漏.我想系统地确定订阅什么.

编辑:

感谢您指向该GetInvocationList()方法的指针.我正在尝试创建一个动态转储结果的调试工具.问题是我发现的解决方案在.Net 2中工作,但不再在.Net 3.5中.本质上,告诉您获取EventInfo的相应FieldInfo(分别为反射,GetField和GetEvents).但是,在.Net 3.5中没有相应的FieldInfo,并且EventInfo不会让我获得调用列表.

我只想转储事件列表及其InvocationList以进行调试.

Øyv*_*hen 6

尝试在被event调用上使用方法GetInvocationList.

这将返回订阅该事件的一组委托.

该数组将按照添加的顺序包含代理.这也可用于从列表中单独输出和调用特定委托,而调用该event.Invoke方法将全部调用它们(但只提供最后一个委托的返回值)