Как узнать, что подписано на событие в C #?

У меня проблема, когда приложение, над которым я работаю, имеет утечки памяти. Опыт научил меня, что одно из первых мест, где языки со сборкой мусора испытывают утечки памяти, связаны с подпиской на события и невозможностью отписаться от них позже. Второй связан с хранением статического состояния. Я новичок в C # и был разочарован непрозрачным типом события.

Мы обнаружили несколько ошибок двойной подписки благодаря удачному розыгрышу, но приложение действительно использует события для ряда вещей. Хотя нам хорошо известен принцип отказа от подписки на все, на что вы подписаны, утечки памяти все же есть. Я хотел бы систематически определять, что на что подписано.

Edit:

Спасибо за указатель на метод GetInvocationList () . Я пытаюсь создать средство отладки, которое будет динамически сбрасывать результаты. Проблема в том, что найденные мной решения работали в .Net 2, но больше не в .Net 3.5. По сути, они говорят вам получить соответствующий FieldInfo для EventInfo (отражение, GetField и GetEvents соответственно). Однако в .Net 3.5 нет соответствующего FieldInfo, и EventInfo не позволяет мне получить список вызовов.

Я просто хочу выгрузить список событий и их InvocationList для целей отладки.

11
задан Berin Loritsch 9 December 2010 в 18:37
поделиться