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

时间:2018-01-31 18:57:58

标签: c# memory-management properties static static-methods

这可能是一个微优化,但我很想知道.NET如何处理这些不同方法的背景。

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

VS

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

使用string可能不是最好的例子;当我开始想知道这件事时,这正是我的工作。

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

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

1 个答案:

答案 0 :(得分:0)

  

它对整个计划有负面影响吗?

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

这可能会导致过多的内存使用量。这只是导致堆使用的另一种方式。

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

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