Я не думаю, что есть способ сделать исключения дешевыми в .net. Они основаны на структурированной обработке исключений, и это дорого. За исключением переписывания среды выполнения .net, я не могу придумать ничего, что могло бы удешевить обработку исключений. Возможно, это немного быстрее в 64-битных системах, поскольку SEH работает там по-другому.
Правильное решение состоит в том, чтобы реорганизовать API-интерфейсы, которые генерируют исключения, чтобы они не создавались так часто. Например, возвращая коды состояния. Если это сторонний код, который вы не можете изменить, тогда я понятия не имею, как улучшить вашу производительность.
Или вы можете написать код, подобный тому, который выдает исключение, которое заранее определяет условия ошибки. Таким образом, вы больше не вызываете API, если знаете, что оно сработает. Хотя это нарушает СУХОЙ, но с кодом стороннего производителя это может быть единственным жизнеспособным решением.