wog*_*les 3 c# multithreading windows-services weak-references
我正在使用ILSpy对使用vb.net编写的旧Windows服务进行逆向工程.我想用C#重写遗留服务.原始服务泄漏内存.
当我查看源代码时,服务类中有以下声明:
private static List<WeakReference> __ENCList = new List<WeakReference>();
Run Code Online (Sandbox Code Playgroud)
此列表仅用于构造函数中,如下所示(imineRun是服务类):
List<WeakReference> _ENCList = imineRun.__ENCList;
Monitor.Enter(_ENCList);
try
{
imineRun.__ENCList.Add(new WeakReference(this));
}
finally
{
Monitor.Exit(_ENCList);
}
Run Code Online (Sandbox Code Playgroud)
这个列表可能导致内存泄漏吗?这个清单是否需要,目的是什么?
由于它在您的代码中没有使用,因此它不是服务的必要部分.现在,我在IL输出中看到了之前看过这个,显然你偶然发现了服务中留下的编辑并继续代码.根据博客文章,它显然可能是高内存使用的罪魁祸首.
在生产服务器上运行以调试模式构建的模块绝不是一个好主意.在这种情况下,调试模式模块结合了这些模块为Visual Studio的编辑和继续功能实现__ENCLIST帮助程序这一事实.
我敢打赌,它是使用完全调试支持而不是作为发布可执行文件编译的.
您可以安全地忽略端口中的此代码.
| 归档时间: |
|
| 查看次数: |
1081 次 |
| 最近记录: |