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