我正在使用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);
}
此列表是否会导致内存泄漏?是否需要此列表以及它的用途是什么?
答案 0 :(得分:5)
由于它在您的代码中无处使用,因此它不是服务的必要部分。现在,我看了一眼,因为我之前在IL输出中已经看过这个,显然你偶然发现了Edit-and-Continue code which was left in the service。根据博客文章,它显然可能是高内存使用的罪魁祸首。
在生产服务器上运行以调试模式构建的模块绝不是一个好主意。在这种情况下,调试模式模块结合了这些模块为Visual Studio的编辑和继续功能实现__ENCLIST辅助类的事实。
我敢打赌它是使用完全调试支持而不是作为发布可执行文件编译的。
您可以在端口中安全地忽略此代码。