我有一个Windows服务,它正在进行大量的交换远程调用以获取一些服务器信息.我注意到,随着时间的推移,服务使用的内存开始增长,直到抛出内存异常.我已经搜索过,看起来有一个已知的内存泄漏System.Management.Automation,它不会Runspace在调用close和/或dispose方法时释放所创建的所有内存.我回顾了建议使用后CreateOutOfProcessRunspace的RunspaceFactory,但不知道如何使用它.
以下是如何重现该问题:( System.Management.Automation参考dll)
for (int i = 0; i < 1000; i++)
{
var runspace = RunspaceFactory.CreateRunspace();
runspace.Open();
runspace.Close();
runspace.Dispose();
}
Run Code Online (Sandbox Code Playgroud)
如果运行此代码,您将看到内存如何递增.由于要求,尽可能保持连接打开不是一个好的解决方案.
你知道我怎么能解决这个问题,即使使用CreateOutOfProcessRunspace的方法RunspaceFactory或如何处置属性格式记忆?
提前致谢
编辑
我正在使用V3并更改运行空间创建以使用CreateRunspacePool方法,看起来泄漏已经消失.非常感谢你的帮助!