我编写了一个PowerShell cmdlet,它会占用一些内存。
protected override void ProcessRecord()
{
Marshal.AllocHGlobal(Size * 1024 * 1024);
}
如果它直接在PowerShell提示符下运行,它可以正常工作。
但是,如果我尝试在C#中启动PowerShell进程并运行它,则会抛出OutOfMemoryException。
Process.Start("PowerShell", @"-NoExit -Command ""Import-Module Something.dll; Take-Memory -Size 1000;""");
Process.Start是否对进程强制执行额外的内存约束?我该如何解决这个问题?
编辑:
使用Run with
PowerShell -NoExit -Command "Import-Module Something.dll; Take-Memory -Size 1000;"
也可以。
答案 0 :(得分:1)
不确定,我在这里尝试答案,因为评论太长了:
假设:
您使用的是64位操作系统(七,Windows 8 ...)
在命令行运行PowerShell命令行或运行PowerShell时,默认情况下运行64位PowerShell。
编译C#程序时,不需要考虑以32位可执行文件为目标的事实。所以你的EXE默认调用一个32位的PowerShell exe。在我看来,1Go太大了,无法在32位PowerShell EXE中找到它。
结论:
您可以尝试将64位用于C#EXE程序吗?