3

可以说我有一个填充的对象数组。

 Resource[] list = new Resource[100000];

偶尔,我想将此列表中的一个对象更改为默认值。

 Resource defaultResource = new Resource();

稍后,我想检查该项目是否为默认项目。所以,我想知道将列表对象设置为默认值与将值设置为 null 之间的性能差异可能是什么。

 list[i] = defaultResource; /*versus*/ list[i] = null;

所以真的,我想知道当一个值设置为 null 而不是将它设置为其他值时,幕后发生了什么。

对不起,如果这是一个愚蠢的问题!

4

2 回答 2

4

将变量设置为现有对象与将其设置为null. null在这两种情况下,无论存储在该变量中的新值是一个对象还是不同的对象,之前已被该变量引用的对象都会更接近成为垃圾回收的条件。分配的其余部分也以相同的方式进行:CLR 不维护引用计数,因此在进行分配时不需要特别发生任何特殊情况。

存储默认对象代替 a 可能是有益的,null以避免null在运行时进行大量检查:这样做可以简化代码,并减少运行时分支的需要。

于 2013-09-05T03:12:19.670 回答
1

为您的方案考虑的一种可能选项 - 您希望简化不必编写空检查代码。

考虑Resource使用代表默认值的存根对您的类进行子类化。

public class NoResource : Resource { }

// ... later

if (res is NoResource) { 
  // handle default value
}

这样,您的代码仍然能够Resource像预期的那样使用对象,并且您可以选择轻松地检查默认值Resource

于 2013-09-05T03:35:04.733 回答