【发布时间】:2014-06-07 16:31:15
【问题描述】:
我有一个 Windows 服务,它正在执行大量交换远程调用以获取一些服务器信息。我注意到,只要时间过去,服务使用的内存就会开始增长,直到引发内存异常。我已经搜索过,看起来System.Management.Automation 中存在已知的内存泄漏,它不会释放调用 close 和/或 dispose 方法时创建的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 并将运行空间创建更改为使用 CreateRunspacePool 方法,看起来泄漏已经消失了。非常感谢你的帮助!
【问题讨论】:
-
是的,您似乎遇到了问题。也许有一种解决方法。你用这个运行空间做什么?
-
@Manuel 为什么标题说问题出在 remote 调用上?你的 sn-p 只创建一个运行空间,它实际上不做任何 PS 调用,远程或本地。
标签: c# powershell memory memory-leaks runspace