《C# 深度》第 4 章中,正在讨论可空类型和“as”运算符。具体来说,期望使用“as”进行类型检查可以比传统的“is”检查和转换提高性能,因为它将流程简化为单一类型检查和值检查。然而,我们观察到了令人惊讶的结果。
为了评估性能,进行了基准测试,其中涉及对包含大量空引用和字符串引用的对象数组中的整数进行求和。该测试测量了以下代码片段的执行时间:
令研究人员惊讶的是,C# 1 代码的性能明显优于“as”代码和 LINQ 代码。
性能差异归因于以下原因因素:
JIT 编译器对“is”和强制转换的优化:
“is”运算符测试和后续强制转换可以通过 JIT 编译器进行优化,从而获得高效的机器以最少的指令执行的代码。这种优化是可能的,因为装箱值类型可以直接拆箱为相同类型的变量,无需任何值转换或复制。
转换为 Nullable
转换为 int?使用“as”需要更复杂的转换过程,因为装箱整数的值表示与 Nullable
LINQ 的意外行为:
OfType LINQ 中的 () 扩展方法还利用“is”运算符和 JIT_Unbox() 辅助函数。然而,它的性能与 Nullable
虽然“as”运算符提供了一种便捷的方法来执行类型检查和可空值处理,但其性能特征在具体场景可能并不总是如预期的那样。在涉及大量拆箱操作的情况下,C# 1 中为“is”和转换生成的优化代码仍然明显更快,这凸显了在选择编码技术时考虑性能影响的重要性。
以上是对于 C# 中的可空类型,'as”运算符是否始终比'is”提供性能优势?的详细内容。更多信息请关注PHP中文网其他相关文章!