我有一个 Windows 服务,需要进行大量的 Exchange 远程调用以获取一些服务器信息。我注意到随着时间的推移,服务使用的内存逐渐增加,直到抛出内存异常。我搜索了一下,发现 System.Management.Automation
中存在已知的内存泄漏问题,该问题在调用关闭和/或处理方法时不会处理所有 Runspace
的内存。我查看了一篇文章,建议使用 RunspaceFactory
的 CreateOutOfProcessRunspace
方法,但不确定如何使用。
以下是如何重现此问题的步骤:(引用了 System.Management.Automation
dll)
for (int i = 0; i < 1000; i++)
{
var runspace = RunspaceFactory.CreateRunspace();
runspace.Open();
runspace.Close();
runspace.Dispose();
}
如果您运行此代码,则会看到内存如何增加。由于要求,尽可能保持连接打开并不是一个好的解决方案。
您知道我如何解决此问题,即使使用RunspaceFactory
的CreateOutOfProcessRunspace
方法或如何正确释放内存吗?
提前致谢
编辑
我正在使用V3,并将runspace创建更改为使用CreateRunspacePool方法,看起来泄漏问题已经解决。非常感谢您的帮助!