【问题标题】:Dictionary Performance字典性能
【发布时间】:2011-05-13 06:44:57
【问题描述】:

teo sn-ps 有什么区别?

片段 1:

{
  Dictionary<MyCLass, bool> dic;
  MyFunc(out dic);
}

片段 2:

{
  Dictionary<MyCLass, bool> dic = null;
  MyFunc(out dic);
}

sn-p 2 性能更好吗?

【问题讨论】:

    标签: c#


    【解决方案1】:

    从技术上讲,第二个代码 sn-p 通过执行冗余的null 集可能会比第一个代码执行更多的指令。我在这里用 likely 对冲,因为 C# 规范可能允许忽略此集合的灵活性。我不知道手头。

    但是我会严重怀疑这会明显影响应用程序的性能。我当然不会为这种优化编写代码,而是更喜欢我发现更容易理解的解决方案。

    【讨论】:

    • @Abdul 我个人更喜欢第一个,因为第二个中的空集是多余的。
    • 冗余空集是什么意思?
    • @Abdul 声明后的第一个动作是将dic 作为out 参数传递。这意味着MyFunc 中的代码如果不先写入就无法访问现有值。因此,原始函数或 MyFunc 都无法看到 null 值,这是多余的。
    • 大量创建字典会带来性能开销吗?
    • @Abdul 第二个代码 sn-p 不会真正影响您的性能。不用担心,您甚至可能无法衡量可能的性能损失。
    【解决方案2】:

    如果您尚未测量应用程序的性能,请不要担心这些。

    这样的事情不太可能产生巨大的影响,事实上,与你写的其他行相比,大多数时候这样的事情不会被注意到。

    先衡量,他们担心性能。

    【讨论】:

      【解决方案3】:

      我喜欢 sn-p 2,它更慢但减少错误的做法更好,总的来说是一个好习惯 - 显式地初始化变量。也许甚至 JIT 也可以在访问时对其进行优化,因此您只会在编译和加载时而不是在执行时损失一点性能(但我尚未验证此调试器/反汇编器,但 JIT 对于计算机来说非常“智能”程序,所以它也许能够做到)

      【讨论】:

        【解决方案4】:

        编译它们并比较 IL。我想它会是一样的。在将 out 参数传递给被调用方法之前,应将 out 参数的存储初始化为零(如果是引用类型,则为 null)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-02-14
          • 1970-01-01
          • 2011-08-10
          • 2011-06-01
          • 1970-01-01
          • 1970-01-01
          • 2015-09-21
          • 1970-01-01
          相关资源
          最近更新 更多