You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Blazor Server应用中使用Stopwatch为何会导致代码执行变慢?

Stopwatch导致代码执行变慢的原因

这是.NET JIT编译器优化策略差异引发的现象,核心原因如下:

  • JIT激进优化被抑制
    仅使用DateTime.UtcNow计时时,JIT编译器会识别到循环逻辑(result++执行10亿次)没有实际外部副作用,直接将整个循环优化为result += 1000000000的赋值操作,实际执行时间极短,所以你看到约250ms的耗时。

    引入Stopwatch后,编译器会判定这段代码的执行时长需要被精确测量,因此禁用了这类激进的循环消除优化,让循环真正执行10亿次,耗时自然大幅提升至约750ms。

  • 执行上下文的影响
    Stopwatch依赖硬件高精度计时器实现,它的存在会改变代码的执行上下文提示,让JIT无法应用循环消除、循环展开等优化。而DateTime.UtcNow精度较低,编译器不会因它的存在放弃优化。

验证方法

你可以通过强制让result产生外部副作用来验证这个结论:

void OnCalcClick() {
    var start = DateTime.UtcNow;
    for (long i = 0; i < 1000000000; i++)
        result ++;
    var stop = DateTime.UtcNow;
    time = (stop - start).TotalMilliseconds;
    // 让result被外部使用,阻止JIT优化循环
    Console.WriteLine(result);
}

此时仅用DateTime.UtcNow计时的耗时会和使用Stopwatch时基本一致,因为编译器无法再优化掉循环的实际执行流程。

内容的提问来源于stack exchange,提问作者Eugeniy Maksimov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 21:01:05