在我的应用程序(.Net 4.6 x86)中,我有一个类来存储来自不同来源的Id,它可以是long或字符串,具体取决于源代码。所以内部它被保存为字符串:
public class GenericId
{
string _internalId;
public GenericId(long id)
{
_internalId = id.ToString();
}
public GenericId(string id)
{
_internalId = id;
}
}
我原本期望这个实例占用内存:
new GenericId("0")
与此相同:
new GenericId(0);
但前者占用12个字节,而后者占用28个字节。
由于我在内存中有大量内存,因此无论是来自哪个来源,内存都会发生巨大变化。
为什么会有差异?
答案 0 :(得分:0)
当您致电long.ToString()
时,您每次都会分配一个新的string
。
C#中的字符串文字在程序集加载时创建一次,然后重新使用:"foo"
在一个地方将在另一个地方引用同一个"foo"
实例。在实际使用文字的地方不会发生内存分配。