我创建了一个powershell脚本,它可以加载一些大的(50MB +)XML文件,并从中检索一些值。它作为一个独立的脚本工作正常(但速度很慢)。
当我从msbuild proj文件调用.ps1时,它会正常启动,但是在加载带有System.OutOfMemoryException异常的大XML文件时就死了。
"C:\Program Files (x86)\MSBuild\12.0\Bin\msbuild.exe" Test.proj
Powershell 4.0
我的解决方法是使用XMLReader而不是XMLDocument,因此它执行顺序读取,工作速度更快,并且不会在MSBUILD下死掉。
虽然我对我的解决方法感到满意,但我仍然想知道为什么从msbuild任务执行ps1时我有内存限制?
归咎于32位版本的MSBUILD吗?或者它是设计的?
答案 0 :(得分:1)
在大型环境中运行脚本时,可能会遇到问题 PowerShell中的异常,告诉你内存不足。
要获取每个shell可用内存量的值,请运行 以下命令:
PowerShell
MaxMemoryPerShellMB
配额默认在v1中仅为150MB 和v2,以及v3中的1024MB。但即使在PowerShell 3.0大型对象下也是如此 可以消耗大量内存。你可以通过增加来解决'内存不足'异常 值
MaxMemoryPerShellMB
。要完成此操作,请使用以下命令 命令:如上面的屏幕截图所示,您可以运行
Get-Item
命令 再次验证命令。最后:重新启动winrm服务......然后你就完成了: - )
我遇到运行powershell远程命令的内存限制问题 在该远程主机上启动java程序。我找到了设置
MaxMemoryPerShellMB
为零,有效地删除了限制并允许 我的程序运行Set-Item .\MaxMemoryPerShellMB 0
...此设置仅影响WSMan shell而不影响PowerShell 本身。这些设置仅适用于WSMan的远程处理组件 致电WinRM。它们也可以通过WinRM在命令中配置 提示。