【问题标题】:C# - Performance of static collections vs collections as fields of singletonC# - 静态集合与集合作为​​单例字段的性能
【发布时间】:2013-01-02 13:07:25
【问题描述】:

我想问一下,对对象集合的静态引用与拥有单例类并将集合作为单例类的普通字段之间是否存在性能差异。

据我所知,静态字段存储在堆的不同部分,所以在这种情况下使用单例时引用的局部性不是更好吗?

【问题讨论】:

  • 我猜你在谈论“堆的不同部分”时是指不同的世代,但我很确定这些在性能上没有区别。唯一的区别是实际将对象从一代移动到另一代,但在谈论集合时,影响仍然接近于不存在。您应该更关心集合中的数据,以及该集合是否是您的问题的正确类型。问一个与所用语言如此接近的性能问题从来都不是一个好的开始恕我直言。
  • 参考地点是什么?请记住,在任何一种情况下,该字段都只是一个参考 - 而在 both 情况下,需要一个静态字段。 (对于单例,静态字段是引用单例本身的字段。)
  • 我的建议是MeasureIt你自己...
  • 感谢大家的cmets。我有一个错误的印象,即当一个字段是静态的时,该字段的内存将在堆中的“其他地方”分配。我不想谈论世代 - 这是我的一个误解,因为我目前正在了解有关 CLR 的更多细节......

标签: c# performance static singleton


【解决方案1】:

静态存储唯一慢的地方是对静态字段的读取或写入。从静态字段获取集合实例或单例实例后,性能没有差异。您现在有一个对象引用,不再接触静态存储。

请注意,从静态字段引用的对象的内存不会存储在该字段中。它存储在堆上。只有对它的引用是静态存储。

静态存储和实例存储的性能差异也很小。

现在,什么更快?单例实例变体较慢,因为您必须通过两个内存引用操作才能到达集合,而不是一个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-01
    • 2012-07-15
    • 2010-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-08
    • 1970-01-01
    相关资源
    最近更新 更多