哪个更昂贵 - 始终分配一个值或检查 null 然后分配

本文关键字:分配 一个 检查 然后 null | 更新日期: 2023-09-27 18:32:55

请考虑下面的 C# 示例。哪个效率更高?我很想知道重复的"if"条件检查是否比直接分配值更昂贵。

在我的代码中,我遇到这种情况 - 每次收到用户请求时都会执行一个代码块。我想设置一个要用于后续日志记录的特定全局键值(null 被记录,直到有一个值)。问题是可以在任何无法确定的请求中接收密钥的值,一旦我设置了它,我就不需要再设置该值了。

下面的 while 循环只是为了模拟所有用户请求的重复代码执行。"value"属性将在某个请求中设置。

var data = new Dictionary<string, string>();
var value = null; // some data received from user that later set the value
var i = 0;
while (i < 1000)
{
   if(data["key"] == null)
   {
      data["key"] = value;
   }
}
vs
while (i < 1000)
{
   data["key"] = value;
}

哪个更昂贵 - 始终分配一个值或检查 null 然后分配

正确答案是"视情况而定"。编译器对代码应用了过多的优化。因此,很难预测生成的 IL 代码的外观。但一般来说,操作速度比两个快。特别是在使用字典的情况下,它执行哈希计算逻辑来按键查找值。

在此示例中,"if"与字典查找相比可以忽略不计。因此,案例 2 应该更快,因为您只执行一次字典查找。