我有一个 Windows 服务,它正在执行大量交换远程调用以获取一些服务器信息。我注意到,只要时间过去,服务使用的内存就会开始增长,直到引发内存异常。我已经搜索过,看起来有一个已知的内存泄漏,在调用 close 和/或 dispose 方法时System.Management.Automation
不会释放创建的所有内存。Runspace
我查看了一篇建议使用CreateOutOfProcessRunspace
ofRunspaceFactory
但不确定如何使用它的帖子。
以下是如何重现该问题:(System.Management.Automation
引用 dll)
for (int i = 0; i < 1000; i++)
{
var runspace = RunspaceFactory.CreateRunspace();
runspace.Open();
runspace.Close();
runspace.Dispose();
}
如果您运行此代码,您将看到内存是如何增加的。由于要求,尽可能保持连接打开不是一个好的解决方案。
你知道我如何解决这个问题,即使使用CreateOutOfProcessRunspace
方法RunspaceFactory
或如何正确处理内存?
提前致谢
编辑
我正在使用 V3 并将运行空间创建更改为使用 CreateRunspacePool 方法,看起来泄漏已经消失了。非常感谢你的帮助!