是否需要静态List <weakreference>?</weakreference>

时间:2011-11-02 14:42:24

标签: c# multithreading windows-services weak-references

我正在使用ILSpy对使用vb.net编写的旧Windows服务进行逆向工程。我想用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 个答案:

答案 0 :(得分:5)

由于它在您的代码中无处使用,因此它不是服务的必要部分。现在,我看了一眼,因为我之前在IL输出中已经看过这个,显然你偶然发现了Edit-and-Continue code which was left in the service。根据博客文章,它显然可能是高内存使用的罪魁祸首。

  

在生产服务器上运行以调试模式构建的模块绝不是一个好主意。在这种情况下,调试模式模块结合了这些模块为Visual Studio的编辑和继续功能实现__ENCLIST辅助类的事实。

我敢打赌它是使用完全调试支持而不是作为发布可执行文件编译的。

您可以在端口中安全地忽略此代码。

相关问题