首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Process.Start()明显慢于在控制台中执行

Process.Start()明显慢于在控制台中执行
EN

Stack Overflow用户
提问于 2014-11-27 10:48:26
回答 2查看 6.8K关注 0票数 12

我在使用.exe执行Process.Start()时遇到了性能问题。从.NET执行的时间比从控制台执行的时间长大约5倍。是什么导致了这一切?下面是一个测试程序:

代码语言:javascript
复制
  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);
     }
  }

其结果是:

代码语言:javascript
复制
 0 Elapsed time 4310ms.
 1 Elapsed time 4330ms.
 2 Elapsed time 4280ms.
 ...

在cmd窗口中运行它几乎会立即返回(分1秒执行)。尝试在控制台中使用

代码语言:javascript
复制
> powershell Measure-Command { cmd /c start /wait %EXE% %ARGS% } 

它显示了大约750毫秒的执行,这是一个很好的5-6倍的速度。不确定我是否正确,但750 did似乎是一个可能的执行时间。

起初,我正在阅读性病,并认为这与此有关,参见Process takes longer to finish than in CMD和类似的问题。显然,在简单的测试程序中,我现在没有读取任何输出,只是执行。

我已经排除了可能的原因,因为这一原因在执行时间上没有任何差别:

  • 调试器/无调试器
  • .NET主机进程的调试/发布构建
  • 工作目录
  • 主机.NET平台处理任何/x86/x64 (exe是本机x64)
  • UseShellExecute真假

关于可执行文件(它是锈蚀语句完成工具'racer‘https://github.com/phildawes/racer),我所知道的是它会运行并打开许多文件。当从.NET主机(例如wrt )来时,这会有什么关系吗?安全,那会导致经济放缓吗?还有什么能导致巨大的性能差异呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-02 14:49:00

在这种情况下,运行时间的差异是由于不同版本的已执行(racer.exe)文件,而与一个是从.NET进程执行,另一个是从命令行执行这一事实无关。

从.NET运行可执行文件时不应该有什么区别,因为它只是使用系统调用来执行程序。

票数 4
EN

Stack Overflow用户

发布于 2014-11-27 12:34:31

代码语言:javascript
复制
    ps.WaitForExit();

这就是区别所在的陈述。您的cmd.exe命令不会等待进程终止。要么删除WaitForExit(),要么使用"cmd /c start /wait %EXE% %ARGS%“来比较苹果和橙子。

换句话说,您没有度量启动进程所用的时间,而是测量进程运行的时间。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27168762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档