Mat*_*att 2 .net c# streamreader
我从.NET应用程序运行exe并尝试将标准重定向到streamreader.问题是,当我这样做
myprocess.exe >> out.txt
out.txt接近14mb.当我执行命令行版本时,它非常快,但是当我从我的csharp应用程序运行该进程时,它非常慢,因为我相信默认的streamreader每4096字节刷新一次.
有没有办法更改Process对象的默认流读取器?
我没试过,但看起来异步方法可能会提供更好的性能.而不是使用process.StandardOutput,请尝试此方法:
Process process = Process
.Start(new ProcessStartInfo("a.exe"){RedirectStandardOutput = true});
if (process != null)
{
process.OutputDataReceived += ((sender, e) =>
{
string consoleLine = e.Data;
//handle data
});
process.BeginOutputReadLine();
}
Run Code Online (Sandbox Code Playgroud)
小智 5
编辑:刚刚意识到我回答了错误的问题。就我而言,标准输出缓冲区已满,并且 WaitForExit() 永远阻塞,因为尚未从缓冲区读取任何内容。因此,如果您遇到这个问题,那么这里有一个解决方案。;)
这是我第一天使用 C#,所以请理解这可能不是最好的解决方案,并且可能并不总是有效。但它在我测试过的 2x 中有效。;) 这是同步的,只需在 WaitForExit() 之前开始将重定向的 stdout/stderr 写入文件即可。这样,WaitForExit() 就不会阻塞等待标准输出缓冲区被清空。
string str_MyProg = "my.exe";
string str_CommandArgs = " arg1 arg2"'
System.Diagnostics.ProcessStartInfo procStartInfo = new System.Diagnostics.ProcessStartInfo(str_MyProg, str_CommandArgs);
procStartInfo.RedirectStandardError = true;
procStartInfo.RedirectStandardOutput = true; // Set true to redirect the process stdout to the Process.StandardOutput StreamReader
procStartInfo.UseShellExecute = false;
procStartInfo.CreateNoWindow = true; // Do not create the black window
// Create a process, assign its ProcessStartInfo and start it
System.Diagnostics.Process myProcess = new System.Diagnostics.Process();
myProcess.StartInfo = procStartInfo;
myProcess.Start();
// Dump the output to the log file
string stdOut = myProcess.StandardOutput.ReadToEnd();
StreamWriter logFile = new StreamWriter("output.txt" );
logFile.Write(stdOut);
logFile.Close();
myProcess.WaitForExit();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6832 次 |
| 最近记录: |