VS调试器做了什么使增量运算符执行速度比什么都不做?

Kor*_*tak 6 .net c# performance increment

这是自解释代码(执行十亿次操作):

int k = 0;

Stopwatch sw = new Stopwatch();
sw.Start();
for (int a = 0; a < 1000; a++)
    for (int b = 0; b < 1000; b++)
        for (int c = 0; c < 1000; c++)
            k++;

sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);

sw = new Stopwatch();
sw.Start();

for (int a = 0; a < 1000; a++)
    for (int b = 0; b < 1000; b++)
        for (int c = 0; c < 1000; c++)
            ; // NO-OP

sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);
Run Code Online (Sandbox Code Playgroud)

结果是(至少在我的电脑上)某处(以毫秒为单位)

2168
2564
Run Code Online (Sandbox Code Playgroud)

第二个总是大约半秒钟.

增加一个变量十亿次的运行时间比执行一次无操作的次数有多长?

编辑:这只发生在DEBUG上.释放正确,第一个持续时间更长,至少在我的计算机上.正如评论中所指出的,即使在RELEASE构建中,也有人遇到过这个问题.但是在DEBUG上会发生什么影响呢?

Azo*_*ous 0

我跑了3次,输出是:

3786

3252


3800

3256


3840

3255

因此,如果您根据调试模式下收集的统计数据做出决定,请不要这样做。

调试模式将大量数据附加到代码中,以在调试过程中帮助调试器。