快速执行命令而不会耗尽内存

快速执行命令而不会耗尽内存

我正在编写一个在 Mono 上运行的 .Net 应用程序。它每秒左右连续执行并获取几个终端命令的输出。

然而,几秒钟后它就会崩溃,因为输出为空。

经过进一步检查,这是由于进程因内存不足而崩溃造成的,例如:

ERROR: System.ComponentModel.Win32Exception: ApplicationName='upower', CommandLine='-i /org/freedesktop/UPower/devices/battery_BAT0', CurrentDirectory='', Native error= Out of memory

有没有办法可以快速执行命令,同时清理使用后的内存,以免内存耗尽?

我正在执行如下命令:

 Dim ret As String = ""
 Dim proc As New System.Diagnostics.Process()
 proc.StartInfo.FileName = file 'i.e upower
 proc.StartInfo.Arguments = arguments 'i.e. -i /org/freedesktop/UPower/devices/battery_BAT0
 proc.StartInfo.UseShellExecute = False
 proc.StartInfo.RedirectStandardOutput = True
 proc.Start()
 ret = proc.StandardOutput.ReadToEnd()
 proc.WaitForExit()
 Return ret

如果有帮助,运行“Mono --version”将返回版本 3.2.8。

我甚至尝试proc.WaitForExit()在读取输出之前进行放置,但这没有帮助。

答案1

前:proc.Start()

添加处理程序方法。例如: process.OutputDataReceived += (sender, a) => Console.WriteLine(a.Data);

并将此行替换为: ret = proc.StandardOutput.ReadToEnd()

有了这个: process.BeginOutputReadLine();


另外,您也可以尝试在原始代码中添加 only process.BeginOutputReadLine()after ret = proc.StandardOutput.ReadToEnd()(因此只需在调用 BeginOutputReadLine 后添加一行)。这应该可以防止 StandardError 流出现死锁。

祝你好运!

相关内容