2013-09-05 2 views
3

Допустим, у меня есть заполненный массив объектов.Что происходит за кулисами, когда значение имеет значение null?

Resource[] list = new Resource[100000]; 

И время от времени я хотел бы изменить объект в этом списке на значение по умолчанию.

Resource defaultResource = new Resource(); 

И позже, я хотел бы проверить, является ли элемент по умолчанию или нет. Итак, мне интересно, каковы могут быть различия в производительности при установке объекта списка на значение по умолчанию, или при установке значения null.

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

Так на самом деле, я хотел бы знать, что происходит за кулисами, когда значение равно нулю по сравнению с установкой его равным что-то другое.

Извините, если это глупый вопрос!

ответ

4

Не существует большой разницы между установкой переменной в существующий объект и установкой ее на null. В обоих случаях объект, на который была указана эта переменная до этого, приблизился бы на один шаг к тому, чтобы получить право на сбор мусора, независимо от нового значения, хранящегося в этой переменной, которое является null или другим объектом. Остальная часть задания идет аналогичным образом: CLR не поддерживает подсчет ссылок, поэтому ничего особенного не должно происходить конкретно в момент создания задания.

Это может быть полезно для хранения объекта по умолчанию вместо null, чтобы избежать обширной null проверки во время выполнения, хотя: делать это упрощает код, и уменьшает потребность в разветвленность во время выполнения.

1

Один из возможных вариантов рассмотрения для вашего сценария - вы хотите упростить отсутствие нулевого кода проверки.

Рассмотрите подкласс класса Resource с заглушкой, которая представляет значение по умолчанию.

public class NoResource : Resource { } 

// ... later 

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

Таким образом, ваш код все еще в состоянии работать с Resource объектами, как он ожидает, чтобы иметь возможность, и при необходимости можно проверить по умолчанию Resource легко.

+0

Спасибо за предложение, это не совсем подходит моему делу. – Colton

+0

Конечно - это всего лишь один из немногих * способов справиться с этим :) – jdphenix

Смежные вопросы