【发布时间】:2024-04-20 19:05:02
【问题描述】:
我有一个主应用程序通过 Process 组件调用另一个控制台应用程序。我通过自定义实现作业对象(代码中的类名称为“作业”)在控制台应用程序上设置了内存限制
每当超过内存限制时,就会引发 OutofMemory 异常或发生 KERNELBASE.DLL 故障。但我无法在主应用程序或控制台应用程序中捕获此异常。
如何处理?
无法在控制台应用程序中处理全局异常。
主应用程序有以下代码
private void startProcess()
{
try
{
Process proc = new Process();
proc.StartInfo.FileName = @"E:\App\console.exe";
proc.StartInfo.CreateNoWindow = true;
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.RedirectStandardOutput = true;
proc.StartInfo.UseShellExecute = false;
proc.OutputDataReceived += Proc_OutputDataReceived;
proc.ErrorDataReceived += Proc_ErrorDataReceived;
proc.BeginOutputReadLine();
proc.BeginErrorReadLine();
proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
proc.Start();
Job job = new Job(_maxmemory);//memory limit set for child process
job.AddProcess(proc.Id);//for the above console
proc.WaitForExit();//this is called on a thread.
}
catch (Exception ex)
{
}
}
控制台应用有以下代码
static void Main(string[] args)
{
System.AppDomain.CurrentDomain.UnhandledException += CatchUnhandledException;
}
static void CatchUnhandledException(object sender, UnhandledExceptionEventArgs e)
{
Console.Error.WriteLine(e.ExceptionObject.ToString());
}
如何在主应用程序或控制台中处理此内存限制异常?
【问题讨论】:
-
这是
Job类 .NET 类型吗?我在 .NET 框架中找不到与您想要的行为相匹配的同名类。 -
@PMF
c# Job这是 Job Objects 的自定义实现,它需要最大内存限制以用于子进程。 -
@ScottChamberlain 是的,您分享的链接。
标签: c# process memory-limit