Process.Start对进程强制执行额外的内存约束?

时间:2014-05-26 03:10:00

标签: c# powershell

我编写了一个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;"

也可以。

1 个答案:

答案 0 :(得分:1)

不确定,我在这里尝试答案,因为评论太长了:

假设:

您使用的是64位操作系统(七,Windows 8 ...)

在命令行运行PowerShell命令行或运行PowerShell时,默认情况下运行64位PowerShell。

编译C#程序时,不需要考虑以32位可执行文件为目标的事实。所以你的EXE默认调用一个32位的PowerShell exe。在我看来,1Go太大了,无法在32位PowerShell EXE中找到它。

结论:

您可以尝试将64位用于C#EXE程序吗?