静态只读字段和性能

时间:2015-12-11 20:41:18

标签: c# memory

假设我有一个具有很多字段的类,这些字段使用配置文件中的数据进行初始化。 Resharper等。人。经常建议应用静态只读修饰符。

我的理解是static关键字导致变量存储在堆栈中而不是堆中。所以我开始怀疑是否存在大量静态字段对内存使用的影响。我四处寻找,我能找到的最好的是static strings上的这篇文章(强调我的):

  

在字符串上使用static关键字时,表示您只需要一个字符串引用,该引用只能指向一个对象。 如果您的计划中有许多字符串值,请不要选择静态关键字。

但不幸的是,它并没有解释原因。

所以我在这一点上最好的猜测是你使用静态修饰符会导致性能提升,因为有一个指针涉及,但你不应该大量使用它们,因为它可能会对内存产生压力,因为垃圾收集器会从来没有扫过他们?

这是准确的吗?

1 个答案:

答案 0 :(得分:4)

拍摄。这是一篇写得很糟糕的文章。

基本上他们试图获得的是一个相对简单的概念:当你使用static关键字时,你只得到一个变量,而当你省略它时,每个实例得到一个变量。变量是静态的,而不是字符串。

就字符串的内存存储而言,所有字符串都存储在堆中,永远不会存储在堆栈中。唯一具有特殊存储空间的字符串称为实习字符串,它们是完全不同的蠕虫,并且根本不适用于此问题。

关于你的上一次评论,生命周期很长的字符串是GC知道如何处理的完全正常的事情,它们会被移动到一个角落,一旦它们幸存下来就不会对性能产生很大的影响有一段时间没有被删除。