c# - long.ToString()占用的字节大于字符串

时间:2017-09-18 03:34:28

标签: c#

在我的应用程序(.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个字节。

由于我在内存中有大量内存,因此无论是来自哪个来源,内存都会发生巨大变化。

为什么会有差异?

1 个答案:

答案 0 :(得分:0)

当您致电long.ToString()时,您每次都会分配一个新的string

C#中的字符串文字在程序集加载时创建一次,然后重新使用:"foo"在一个地方将在另一个地方引用同一个"foo"实例。在实际使用文字的地方不会发生内存分配。

相关问题