string.Empty和null需要多少空间?

空字符串和null占用多少内存?

我发现了这个问题 ,它讲述了String.Empty内存分配但不是null

如果我想在会话中存储一个空字符串或null ,哪个会占用更少的空间?

  class MyClass { public string One { get; set; } public string Two { get; set; } public MyClass(string one,string two) { One = one; Two = two; } } class Main { var emp = new MyClass(String.Empty, String.Empty); var nul = new MyClass(null,null); } 

MyClass ,绝对没有区别。 两者都是“引用的大小” – 4个字节或8个字节。 如果值引用任何其他字符串,它也将占用相同的空间量。

当然,空字符串对象会占用空间,但它会占用相同数量的空间,但是它会有很多其他引用。 (换句话说,无论是否引用它都不会对内存产生任何影响…… string.Empty字段仍然会引用它,因此它不会像垃圾一样被收集。)

我想两者都是一样的。 一个是空引用(即可能为null保留一些魔术内部引用值),一个是对类中静态字段的引用。 我怀疑他们在记忆方面会有所不同。 注意:这是一个猜测,而不是知识,但无论实际答案是什么,我怀疑你会看到很大的差异。 如果那么多的话,期望它们在几个字节的范围内。

无论如何,你为什么担心这个而不是用你的时间来解决实际的,有趣的或重要的问题?

如果你想做一些像释放字符串使用空间的东西,并且你选择哪一个并不重要,请使用null 。 它可以节省内存,可能(虽然自String.Empty汇集后可疑)但它并不重要。 null是正确的。

如果您希望数据字面上没有任何内容,请使用null。 如果你真的希望字符串为空(即如果你想稍后操作那个空字符串),请使用string.empty。 记忆不应该是这里的问题。