【问题标题】:Why is looping in nodejs faster than in c# (dotnet 6)为什么在 nodejs 中循环比在 c# 中更快(dotnet 6)
【发布时间】:2021-12-18 22:40:17
【问题描述】:

我尝试为 c# 版本 10 执行此循环

 long num = 0;
 for (long i = 0; i < 100000000; i++)
    {
     num = num + i;
    }
 Console.WriteLine(num);

在使用 dotnet CLI 工具 (dotnet build) 构建控制台应用程序 (newapp) 之后 我通过使用以下代码执行控制台应用程序的 exe 编译代码来测量执行命令所需的时间:

Measure-Command { dotnet ./newapp.exe}  

我平均得到了这个输出

Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 0
Milliseconds      : 391
Ticks             : 3914079
TotalDays         : 4.53018402777778E-06
TotalHours        : 0.000108724416666667
TotalMinutes      : 0.006523465
TotalSeconds      : 0.3914079
TotalMilliseconds : 391.4079

当我为 nodejs 写这个时:

var num=0;
for(let i = 0; i<100000000; i++){
    num=num+i;
}
console.log(num);

我执行了这个:

 Measure-Command { node c.js} 

我平均得到以下输出:

Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 0
Milliseconds      : 346
Ticks             : 3462230
TotalDays         : 4.00721064814815E-06
TotalHours        : 9.61730555555555E-05
TotalMinutes      : 0.00577038333333333
TotalSeconds      : 0.346223
TotalMilliseconds : 346.223

所以我的问题是为什么 nodejs 在我的机器上执行得更快。我认为编译后的 c# 应该比 nodejs 执行得更快。还是我做错了什么?

【问题讨论】:

  • 你是在发布模式下构建的吗? (dotnet build -c Release) - 尽管在现实中,任何只持续几百毫秒的事情:可能很难下定论
  • “性能”并不是真正可以运行一次并完全信任结果的东西。这也很大程度上取决于您如何编译每个应用程序、如何运行它们、您正在使用什么版本的工具等等。另外,您真的很想在 很多 台计算机上分析您的声明以获得平均值。
  • 公平的赌注,C# JIT 编译器也花费了大量资源进行优化。
  • @gunr2171 感谢您的纠正。我已经对 nodejs 执行命令进行了更改。
  • 如果你用 C 语言编写了那个循环,-O3 构建可能会完全优化循环。比较琐碎代码的性能很难。

标签: c# node.js .net performance


【解决方案1】:

大部分时间都花在了启动进程和打印的开销上,而不是实际的循环本身。您只需测量循环运行的时间。

此外,JIT 使第一次运行稍慢,因此您可能应该使用 BenchmarkDotNet 对 C# 代码进行基准测试。不过,我不确定 nodejs 的最佳选择是什么。

【讨论】:

    【解决方案2】:

    这对于速度测试来说太简单了。更复杂的数值处理算法会给出更有意义的结果。

    它实际上是编译到 25 条机器指令,而且样本太小,无法进行很好的比较。

    【讨论】:

    • 我实际上循环了一个更大的数字,并且大多数时候 nodejs 似乎更快。
    猜你喜欢
    • 2014-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-07
    • 1970-01-01
    • 2021-10-01
    • 2020-12-25
    相关资源
    最近更新 更多