Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#-静态集合与集合作为单例字段的性能_C#_Performance_Static_Singleton - Fatal编程技术网

C#-静态集合与集合作为单例字段的性能

C#-静态集合与集合作为单例字段的性能,c#,performance,static,singleton,C#,Performance,Static,Singleton,我想问一下,对象集合的静态引用与使用singleton类以及将集合作为singleton类的普通字段相比,在性能上是否存在差异 据我所知,静态字段存储在堆的不同部分,所以在这种情况下使用单例时,引用的局部性不是更好吗?静态存储唯一慢的地方是对静态字段的读取或写入。从静态字段获得集合实例或单例实例后,性能没有差异。您现在有一个对象引用,不再接触静态存储 请注意,从静态字段引用的对象的内存不存储在该字段中。它存储在堆上。只有对它的引用是静态存储 静态存储和实例存储之间的性能差异也非常小 现在,什么更

我想问一下,对象集合的静态引用与使用singleton类以及将集合作为singleton类的普通字段相比,在性能上是否存在差异


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

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

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

静态存储和实例存储之间的性能差异也非常小


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

我猜您在谈论“堆的不同部分”时指的是不同的代,但我很确定这些操作在性能上没有什么不同。唯一的区别在于实际将对象从一代移动到另一代时,但在讨论集合时,其影响几乎不存在。您应该更加关注集合中的数据,以及集合是否是解决问题的正确类型。问一个与所用语言如此接近的性能问题从来都不是一个好的开始。什么的引用位置?请记住,在任何一种情况下,字段都只是一个引用,在这两种情况下,都需要一个静态字段。(对于单例,静态字段是指单例本身的引用。)我的建议是你自己…谢谢大家的评论。我有一个错误的印象,当一个字段是静态的,那么该字段的内存将被分配到堆中的“其他地方”。我不想谈论几代人-这是我的一个误解,因为我目前正在学习关于CLR的更多细节。。。