Нужен ли статический список <WeakReference>? - PullRequest
3 голосов
/ 02 ноября 2011

Я занимаюсь обратным проектированием старой службы Windows, написанной на vb.net с использованием ILSpy Я хочу переписать устаревший сервис в C #. Оригинальный сервис утечки памяти.

Когда я смотрю на источник, в классе обслуживания есть следующее объявление:

private static List<WeakReference> __ENCList = new List<WeakReference>();

Этот список используется только в конструкторе следующим образом (imineRun - класс обслуживания):

List<WeakReference> _ENCList = imineRun.__ENCList;
            Monitor.Enter(_ENCList);
            try
            {
                imineRun.__ENCList.Add(new WeakReference(this));
            }
            finally
            {
                Monitor.Exit(_ENCList);
            }

Может ли этот список вызывать утечки памяти? Нужен ли этот список и какова его цель?

1 Ответ

5 голосов
/ 02 ноября 2011

Поскольку он не используется нигде в вашем коде, он не является обязательной частью службы. Теперь я посмотрел вокруг, как я видел это раньше в выходных данных IL, и, очевидно, вы наткнулись на код редактирования и продолжения, который был оставлен в службе . Судя по сообщению в блоге, это может быть причиной большого использования памяти.

Наличие модулей, встроенных в режим отладки, работающих на производственном сервере, никогда не было хорошей идеей И как оказалось в этом случае, модули режима отладки в сочетании с тем, что эти модули реализуют вспомогательный класс __ENCLIST для функции редактирования и продолжения Visual Studio.

Держу пари, он был скомпилирован с полной поддержкой отладки, а не как исполняемый файл релиза.

Вы можете спокойно игнорировать этот код в своем порту.

...