空字符串和null
占用多少内存?
我找到了this question,它告诉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);
}
答案 0 :(得分:11)
在MyClass
内,绝对没有区别。两者都是“引用的大小” - 4个字节或8个字节。如果值引用任何其他字符串,它也将占用相同的空间量。
当然空字符串 object 会占用空间,但它会占用相同数量的空间,但是它有很多其他引用。 (换句话说,你是否引用它对内存没有任何影响...... string.Empty
字段仍将引用它,所以它不像它可能是垃圾收集。)
答案 1 :(得分:6)
我想,两者都是一样的。一个是空引用(即可能为null
保留一些魔术内部引用值),一个是对类中静态字段的引用。我怀疑他们在记忆方面会有所不同。注意:这是猜测,而不是知识,但无论实际答案是什么,我怀疑你会看到很大的差异。如果那么多的话,期望它们在几个字节的范围内。
无论如何,你为什么要担心这个而不是用你的时间来解决实际的,有趣的或重要的问题?
答案 2 :(得分:0)
如果你想做一些像释放字符串使用空间的东西,并且选择哪一个并不重要,请使用null
。它可以节省内存,可能(虽然自String.Empty
汇集后可疑),但这并不重要。 null
是正确的。
答案 3 :(得分:0)
如果您希望数据字面上没有任何内容,请使用null。如果你真的希望字符串为空(即如果你想稍后操作那个空字符串),请使用string.empty。记忆不应该是这里的问题。