的过程.Start会对进程施加额外的内存约束

本文关键字:内存 约束 施加额 过程 Start 进程 | 更新日期: 2023-09-27 18:04:58

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

过程。开始对进程实施额外的内存约束吗?我怎样才能解决这个问题呢?

编辑:

使用Run with

PowerShell -NoExit -Command "Import-Module Something.dll; Take-Memory -Size 1000;"

的过程.Start会对进程施加额外的内存约束

不确定,我试着在这里回答,因为它太长了,不能评论:

假说:

您正在使用64位操作系统(7,Windows 8…)

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

当你编译你的c#程序时,你没有考虑到你的目标是一个32位的可执行文件。所以你的EXE在默认情况下调用一个32位的PowerShell EXE。在我看来,1Go太大了,不能在32位的PowerShell EXE中一块找到。

结论:

您可以尝试为您的c# EXE程序设置64位吗?