的过程.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;"
不确定,我试着在这里回答,因为它太长了,不能评论:
假说:
您正在使用64位操作系统(7,Windows 8…)
当您运行PowerShell命令行或在命令行中运行PowerShell时,默认情况下您运行64位的PowerShell。
当你编译你的c#程序时,你没有考虑到你的目标是一个32位的可执行文件。所以你的EXE在默认情况下调用一个32位的PowerShell EXE。在我看来,1Go太大了,不能在32位的PowerShell EXE中一块找到。
结论:
您可以尝试为您的c# EXE程序设置64位吗?