Подтвердить что ты не робот

Насколько дорого стоит листинг объекта?

Возможный дубликат:
Перформанс TypeCasting

Насколько дорогим является листинг как объект как другой объект?

CustomClass instance = GenericObject as CustomClass

Следует ли избегать всех затрат?

Желание увидеть, как другие думают об этом. Я уверен, что это очень ситуативно.

4b9b3361

Ответ 1

Вам следует избегать беспокойства по поводу влияния производительности на определенные языковые функции, если у вас нет конкретных доказательств (измерений), которые фактически вызывают проблему.

Вашими первыми проблемами должны быть правильность кода и его ремонтопригодность.

Однако, как общее замечание, ненужное кастинг часто можно избежать на С#, просто применяя хорошие методы программирования OO и используя дженерики (особенно коллекции) соответственно. В тех случаях, когда вам нужно выполнить кастинг, вряд ли это будет узким местом производительности, если вы не делаете это в узком цикле или типах, которые могут вызвать недопустимое исключение литья.

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

Ответ 2

Нет, его не следует избегать любой ценой. Кастинг не очень дорог. Конечно, если у вас есть цикл, который работает миллион раз в секунду, может возникнуть смысл избежать кастинга, чтобы сохранить некоторую производительность, иначе это не вызовет проблем с производительностью.

Реальная проблема с литьем заключается в том, что она обманывает тип безопасности. Если вы не будете осторожны, не слишком сложно вводить ошибки или уменьшать читаемость кода, если вы бросаете вещи повсюду.

Ответ 3

Если вы можете использовать generics, то это лучшее решение, чем литье. Бокс и распаковка - это дорогостоящая операция, которую следует избегать, если это возможно. Проблема иногда просто не может быть устранена.

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

Ответ 4

Как правило, стоимость литья объекта на основе adhoc низка в широком масштабе вещей. Однако, если вы многократно набрасываете объекты много раз, то тогда вам следует попытаться избежать этого, если вы обнаружите, что это является причиной проблемы с производительностью.

В конце концов, одним из основных улучшений от .NET 1.1 до 2.0 было введение генериков - это затронуло проблему строго типизированных списков объектов (например, ArrayList = на основе объекта, List = типизированный список)