静态属性会导致内存膨胀吗?

Do static properties cause memory bloat?

这可能是一个微优化,但我只是想了解一些关于 .NET 如何处理这些不同方法的背景知识。

private const string SomeText = "(imagine this might be pages worth of text)"
public static ObjectThing SomeObject { get; } = new ObjectThing(SomeText);

public static ObjectThing GetSomeObject() {
    const string someText = "(kilobytes or megabytes of text)";
    return new ObjectThing(someText);
}

使用 string 可能不是最好的例子;当我开始想这个的时候,这就是我正在使用的东西。

一般来说,我的想法是第二种方法由垃圾收集器决定生死。

但这让我想知道:如果你初始化了足够多的静态属性,并且它们足够大,是否会对整个程序产生相对负面的影响?

does it have a relatively negative impact on the overall program?

静态属性是使用作为 GC 根的静态字段实现的。因此,任何可从静态 属性 访问的对象都将永远存在。

这样肯定会导致过多的内存使用。这只是另一种引起堆使用的方式。

是否过多取决于内存使用量、可用内存量以及GC速度是否是瓶颈。

在实际应用中,这通常无关紧要。当然,除非你在那里锚定一个巨大的数据结构,但同样与引用静态 属性 无关。这只是一般的内存使用情况。