Вопрос

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

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

Я хотел бы знать, есть ли какое-либо замедление времени выполнения из-за простого наличия блока try / catch (который никогда не отлавливает исключение, если программе все равно не придется завершаться).Блок try / catch находится внутри функции, которая должна вызываться повторно.Я подозреваю, что это лишь минимальные затраты.

Можно ли количественно оценить стоимость в терминах циклов процессора или других задач (та же стоимость, что и умножение с плавающей запятой), или другим способом?

Мы используем Microsoft C#.Net 3.5 под управлением Windows XP.

Это было полезно?

Решение

Исключения .NET имеют очень, очень низкие накладные расходы, если только они не генерируются.Наличие блока try / catch на месте окажет очень минимальное влияние на производительность.Я не обнаружил почти никакого влияния, даже в очень быстрых и плотных циклах, на наличие обработки исключений.

Однако исключения в .NET обходятся ОЧЕНЬ дорого, когда они генерируются.Они, как правило, оказывают гораздо большее влияние на производительность, если вы их используете, чем многие другие языки.Это связано с информацией о полном стеке, собранной при создании исключения, и т.д.

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

Однако, если вы обеспокоены, я бы посоветовал вам составить профиль вашей рутины и протестировать ее самостоятельно.Это был мой опыт после довольно продолжительного профилирования производительности.В вашей собственной кодовой базе нет замены для измерения.

Другие советы

Хорошая дискуссия с метриками о влиянии try catch на производительность здесь.

Снижают ли блоки try / catch производительность, когда исключения не генерируются?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top