【发布时间】: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