C#Process.Start()比控制台慢

gu4*_*471 6 c# console process

我想为ffmpeg输出创建一个解析器.但是当只运行ffmpeg时

strCmdText = "-y -i \"" + path + "\"";
strCmdText += " -async 1 -vf yadif -c:v libx264 -b:v 1024k -r 30 -bf 1 -an nul.avi";
Process.Start(new ProcessStartInfo("lib\\ffmpeg.exe", strCmdText));
Run Code Online (Sandbox Code Playgroud)

它比批量启动慢2/3:

set FFMPEG="ffmpeg\ffmpeg.exe"
%FFMPEG% -y -i %1 -async 1 -vf yadif -c:v libx264 -b:v 1024k -r 30 -bf 1 -an -pass 1 nul.avi
Run Code Online (Sandbox Code Playgroud)

在C#中运行它的fps速率为130(CPU:100%),但运行它与批处理它有400 fps(CPU 75%).

在两种方式中,RAM都是使用的,#Handels和#Threads也是如此.将进程优先级设置为High/Live不会解决此问题,也不会在单独的线程中运行该进程.

这是正常的,还是可以修复?

PaR*_*RaJ 4

当您使用 启动应用程序时Process.Start,命令提示符中缺少一个-pass 1开关,这可能会影响输出。

AFAIK,通过启动的应用程序的速度和输出Process.Start与正常情况下启动的应用程序相同。

性能可能会有 1% 或 2% 的变化,但这主要是由于 cpu、进程关联性和与硬件相关的因素造成的。