Что происходит за кулисами, когда значение равно нулю?

Допустим, у меня есть заполненный массив объектов.

 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 без труда.

Другие вопросы по тегам