【发布时间】:2017-04-20 09:10:46
【问题描述】:
我正在使用 powershell 异步管道调用从 C# 自动使用 powershell 脚本,我注意到当我使用相同的运行空间一遍又一遍地执行脚本时,<scriptname>.vhost.exe 内存使用量会不断增加,并且在一天的操作后它将耗尽内存。
有没有一种方法可以测量运行空间占用了多少内存,或者实际上,这就是你测量它的方式。我知道我可以准备一个调用 WMI 的特殊脚本,它会返回一个进程列表,我可以搜索正确的虚拟主机,然后对特定行进行子串化,但我认为这只会增加概率。
我在想也许 runspaceconfiguration 类或 $host 变量会提供总结,但我什么也看不到。
理想情况下,我想调整分配给它的内存的大小,一旦达到那个大小,我就会将其处理掉,并创建一个新的运行空间,但这很昂贵。是他们通过释放内存,比如说一个powershell dispose。
26.05.2009
我真正想知道的是,当长时间执行多个脚本会影响运行时内存时,内存是如何使用的。本质上,我有一个由规则驱动的执行引擎。当规则触发时,有时会执行脚本。每个规则库(规则集)都有自己的 powershell 主机。问题是如果我执行多个脚本,那么当前的 appdomain 会如何影响内存。将主机转储到另一个应用程序域中会更好,还是在当前标准 c# 方式之外设置它的运行时。问题是,他们缺乏好的文档。本质上,我想通过重复使用确保它们不是内存使用的累积。如果我将它发射到一个远程域中,那么至少当它达到一定大小时,我可以转储它并重新创建它。
你的想法是什么?
【问题讨论】:
-
我之前问过是否有任何 PowerShell 分析器。不幸的是,没有。也许您可以使用标准的 .NET 分析器并查看分配的 PSObject。 (例如 dotTrace)。
-
我希望控制更多的动态使用。当我执行几十个脚本并发现 appdomain 已经增加到 heem 的大小时,我不想有 summat。我可以在每次好的脚本执行之后调用 System.GC]::Collect()。但是扩展操作后仍有可能appdomain会消耗所有内存。我可以创建和拆除 pshell 异步调用程序所在的远程应用程序域,因为它太贵了。在每 50 个脚本 exe 之后将其拆毁,如果我重新调整它的大小,可能。可能只是 appdomain 本身的大小。需要检查一下。谢谢。
标签: c# memory powershell