Я тестирую комплексное .net/COM-приложение в Intel Inspector (утечки собственной памяти). В довольно многих местах в .net-коде мы кэшируем ссылки на COM-объекты в статических полях. Очевидно, Инспектор отмечает, что они являются утечками. В некоторых случаях достаточно подавления подавления, однако иногда количество объектов, помеченных (созданных как часть основного COM-объекта), выходит из-под контроля (сотни), и подавление может скрыть похожие шаблоны, которые являются фактическими утечками. Сделать длинную историю коротким - как раз перед выходами процесса Я повторяю все классы во всех сборках, загружаемых в appdomain, и я устанавливаю нулевые статические поля, ссылающиеся на мои COM-объекты. Это было бы здорово для будущего использования, если бы я мог печатать все статические поля, ссылающиеся на COM-объекты, даже если они еще не были приняты как допустимые кеши (и могут быть фактическими утечками).Как определить, был ли статический конструктор выполнен в .net?
Однако, если тип никогда не использовался, его статический конструктор будет выполняться, когда я вызываю getField (чтобы увидеть, является ли он нулевым) и может создавать больше COM-объектов. Есть ли способ определить, когда тип использовался в текущем AppDomain?
К сожалению, это не для меня. Я не могу изменить производственный код только ради этого теста. Во-вторых, статический конструктор фактически генерируется компилятором, когда в нашем коде F # мы создаем привязки. Поэтому для регистрации потребуется изменить много классов и потребовать изменения каждого типа, кто-то добавляет новый модуль/класс со связыванием. – MichalMa
Ну, короткий ответ заключается в том, что вы не можете делать то, что хотите. Если вы предоставите некоторый пример кода (даже в F #), я уверен, что он либо выявит недостаток архитектуры, либо способ обойти его. –
Филипп, я думаю, что мой первый пункт говорит все - это просто тест, и он не оправдывает изменение 1000+ проектов, чтобы зарегистрировать экземпляр класса. Если дело доходит до худшего, мне нужно будет просто обработать мой код на основе исследований ручной отладки (когда Inspector флага утечки отслеживает, какой класс содержит ссылку на него). – MichalMa