假设我有一个填充的对象数组。
Resource[] list = new Resource[100000];
有一段时间,我想将此列表中的对象更改为默认值。
Resource defaultResource = new Resource();
稍后,我想检查该项目是否为默认值。 所以,我想知道将列表对象设置为默认值时的性能差异,而不是将值设置为null。
list[i] = defaultResource; /*versus*/ list[i] = null;
所以,我真的想知道当一个值设置为null而不是将其设置为其他值时幕后发生的事情。
对不起,如果这是一个愚蠢的问题!
答案 0 :(得分:4)
将变量设置为现有对象与将其设置为null
之间没有太大区别。在这两种情况下,无论存储在该变量中的新值是null
还是不同的对象,之前该变量引用的对象都会更接近于有资格进行垃圾回收。分配的其余部分也是以相同的方式进行的:CLR不保持引用计数,因此在进行赋值时,不需要特别发生任何特殊情况。
存储默认对象代替null
以避免在运行时进行大量null
检查可能是有益的,但这样做可以简化代码,并减少运行时分支的需要。
答案 1 :(得分:1)
为您的场景考虑一个可能的选项 - 您希望简化不必编写空检查代码。
考虑使用表示默认值的存根对您的Resource
类进行子类化。
public class NoResource : Resource { }
// ... later
if (res is NoResource) {
// handle default value
}
这样,您的代码仍然能够按照预期的方式使用Resource
个对象,并且您可以选择轻松地检查默认Resource
。