Что происходит за кулисами, когда значение равно нулю?
Допустим, у меня есть заполненный массив объектов.
Resource[] list = new Resource[100000];
И время от времени я хотел бы изменить объект в этом списке на значение по умолчанию.
Resource defaultResource = new Resource();
А позже я хотел бы проверить, является ли элемент по умолчанию или нет. Итак, мне интересно, какие различия в производительности могут быть при установке объекта списка в значение по умолчанию, в отличие от установки значения в ноль.
list[i] = defaultResource; /*versus*/ list[i] = null;
Так что, на самом деле, я хотел бы знать, что происходит за кулисами, когда значение равно нулю, а не равно чему-то другому.
Извините, если это глупый вопрос!
2 ответа
Нет большой разницы между установкой переменной в существующий объект и установкой в null
, В обоих случаях объект, на который ранее ссылалась эта переменная, приблизился бы на один шаг к получению права на сборку мусора, независимо от того, что новое значение, хранящееся в этой переменной, является null
или другой объект. Остальная часть назначения также выполняется аналогичным образом: CLR не поддерживает счетчик ссылок, поэтому ничего особенного не должно происходить конкретно в момент выполнения назначения.
Может быть полезно хранить объект по умолчанию вместо null
избегать обширных null
хотя проверка во время выполнения: это упрощает код и уменьшает необходимость ветвления во время выполнения.
Один из возможных вариантов для вашего сценария - вы хотите упростить отсутствие необходимости писать код проверки на ноль.
Рассмотрите подклассы вашего Resource
класс с заглушкой, которая представляет значение по умолчанию.
public class NoResource : Resource { }
// ... later
if (res is NoResource) {
// handle default value
}
Таким образом, ваш код все еще может работать с Resource
объекты, как он ожидает, и вы можете при желании проверить по умолчанию Resource
без труда.