C#-静态集合与集合作为单例字段的性能
我想问一下,对象集合的静态引用与使用singleton类以及将集合作为singleton类的普通字段相比,在性能上是否存在差异C#-静态集合与集合作为单例字段的性能,c#,performance,static,singleton,C#,Performance,Static,Singleton,我想问一下,对象集合的静态引用与使用singleton类以及将集合作为singleton类的普通字段相比,在性能上是否存在差异 据我所知,静态字段存储在堆的不同部分,所以在这种情况下使用单例时,引用的局部性不是更好吗?静态存储唯一慢的地方是对静态字段的读取或写入。从静态字段获得集合实例或单例实例后,性能没有差异。您现在有一个对象引用,不再接触静态存储 请注意,从静态字段引用的对象的内存不存储在该字段中。它存储在堆上。只有对它的引用是静态存储 静态存储和实例存储之间的性能差异也非常小 现在,什么更
据我所知,静态字段存储在堆的不同部分,所以在这种情况下使用单例时,引用的局部性不是更好吗?静态存储唯一慢的地方是对静态字段的读取或写入。从静态字段获得集合实例或单例实例后,性能没有差异。您现在有一个对象引用,不再接触静态存储 请注意,从静态字段引用的对象的内存不存储在该字段中。它存储在堆上。只有对它的引用是静态存储 静态存储和实例存储之间的性能差异也非常小
现在,什么更快?singleton实例变体的速度较慢,因为您必须通过两个内存延迟操作才能到达集合,而不是一个。我猜您在谈论“堆的不同部分”时指的是不同的代,但我很确定这些操作在性能上没有什么不同。唯一的区别在于实际将对象从一代移动到另一代时,但在讨论集合时,其影响几乎不存在。您应该更加关注集合中的数据,以及集合是否是解决问题的正确类型。问一个与所用语言如此接近的性能问题从来都不是一个好的开始。什么的引用位置?请记住,在任何一种情况下,字段都只是一个引用,在这两种情况下,都需要一个静态字段。(对于单例,静态字段是指单例本身的引用。)我的建议是你自己…谢谢大家的评论。我有一个错误的印象,当一个字段是静态的,那么该字段的内存将被分配到堆中的“其他地方”。我不想谈论几代人-这是我的一个误解,因为我目前正在学习关于CLR的更多细节。。。