我使用以下命令执行 .exe 时遇到性能问题Process.Start()
。 .NET 的执行时间大约是控制台的 5 倍。什么会导致这种情况?这是一个测试程序:
public static void Main(string[] argv)
{
for (int i = 0; i < 10; i++)
{
ProcessStartInfo psi = new ProcessStartInfo(ExePath, Args);
Process ps = new Process {StartInfo = psi};
Stopwatch sw = Stopwatch.StartNew();
ps.Start();
ps.WaitForExit();
sw.Stop();
Console.WriteLine(i+" Elapsed time: " + sw.ElapsedMilliseconds + "ms.");
Thread.Sleep(1000);
}
}
结果是这样的:
0 Elapsed time 4310ms.
1 Elapsed time 4330ms.
2 Elapsed time 4280ms.
...
在 cmd 窗口中运行它几乎立即返回(执行时间不到 1 秒)。尝试在控制台中使用
> powershell Measure-Command { cmd /c start /wait %EXE% %ARGS% }
显示执行时间约为 750 毫秒,速度快了 5-6 倍。不确定我这样做是否正确,但 750 毫秒感觉像是一个可能的执行时间。
起初我正在阅读标准并认为它与此相关,请参阅例如与 CMD 相比,该过程需要更长的时间才能完成 https://stackoverflow.com/questions/22638304/process-takes-longer-to-finish-than-in-cmd和类似的问题。显然,在简单的测试程序中,我现在没有读取任何输出,只是执行。
我已经排除了导致执行时间没有差异的可能原因:
- 调试器/无调试器
- .NET 主机进程的调试/发布构建
- 工作目录
- 主机.NET进程的平台Any/x86/x64(exe是本机x64)
- UseShell执行 true/false
我对可执行文件的了解(这是 rust 语句完成工具“racer”https://github.com/phildawes/racer https://github.com/phildawes/racer)是它会关闭并打开大量文件。当来自 .NET 主机时,这会很重要吗?字。安全,导致速度放缓?还有什么可能导致巨大的性能差异?
本例中运行时间的差异是由于执行的版本不同(racer.exe
)文件,并且与一个从 .NET 进程执行而另一个从命令行执行的事实无关。
从 .NET 运行可执行文件时应该没有区别,因为它只是使用系统调用来执行程序。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)