Исключения .NET: оптимизация исключительного случая - PullRequest
1 голос
/ 16 июня 2011

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

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

Теперь в .NET говорят, что try ing ничего не стоит, а catch ing.(Стоимость обработки исключений в исключительном случае).

Есть ли способ сообщить .NET, что нужно указывать стоимость установки обработчика?Как в C ++?

Уточнение: вызывающий код «перебирает» все возможные значения аргументов функции:

foreach( var enumvalue in Enum.GetValues( MyEnum ) ) {
   try {
      libraryObject.libFunction( enumvalue ); // will probably throw...
   } catch(ArgumentException) {
   }
}

Примечание: я знаю, что это не очень хороший API.Он должен быть расширен, чтобы перебирать «возможные» значения или работать с кодами возврата.Мне не нужны ответы, которые подтверждают это.

1 Ответ

2 голосов
/ 16 июня 2011

Я не думаю, что есть способ сделать исключения дешевыми в .net. Они основаны на структурированной обработке исключений, и это дорого. За исключением переписывания среды выполнения .net, я не могу придумать ничего, что могло бы удешевить обработку исключений. Возможно, это немного быстрее в 64-битных системах, поскольку SEH работает там по-другому.

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

Или вы можете написать код, подобный тому, который выдает исключение, которое заранее определяет условия ошибки. Таким образом, вы больше не вызываете API, если знаете, что оно сработает. Хотя это нарушает СУХОЙ, но с кодом стороннего производителя это может быть единственным жизнеспособным решением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...