为什么在C#代码中使用大括号需要时间?

8
我正在使用 Ants Performance Profiler 8.5,当我看到代码每行的运行时间时,我发现花括号也需要时间。如下图所示,您可以在括号左侧看到以毫秒为单位的时间: enter image description here 有时候我会得到更多的时间,比如 5 毫秒... 这是为什么?这是垃圾回收吗?

1
我认为你误读了它... 返回值需要0毫秒吗?虽然有可能是垃圾回收(用于临时变量声明),但更可能的是时间偏移。 - Sayse
1
文档上说了什么?我只能猜测它将在堆栈上处理参数,准备堆上的本地变量,并在最后处理输出参数和清理工作? - thst
7
性能分析器只能测量由您的C#代码生成的机器代码所花费的时间。从机器代码返回到C#代码的映射并不总是完美的,特别是在像您应该一样优化代码的情况下进行性能分析时更容易出现这种情况。在花括号处,需要设置方法的堆栈帧并将其再次拆除,这至少需要几个纳秒,乘以调用该方法的次数。测量5毫秒是过度的,并应视为“实验误差”。 - Hans Passant
@Hans 那听起来对我来说就是一个答案。 - Rotem
这只是一个提示,我无法解释5毫秒。 - Hans Passant
1个回答

3
定义方法时,编译器会知道作用域内的一组参数,称为 maxstack。这暗示了该方法需要分配的内存量。这可能是额外时间的源头 - CLR 进行内存分配。
添加更多大括号实际上不会增加 maxstack 的参数。它将范围限定在整个方法中。作用域更像是一个逻辑分组,而不是由 CLR 实现来释放内存。
关于您有关垃圾回收的问题,我不认为这是问题的根本原因。GC 在需要时由单独的线程运行。虽然这可能是 GC 的原因,但在您的情况下,我严重怀疑这点。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接