Дело с try-catch
. Это то, что он всегда пытается пройти через код внутри try
, и если это не сработает, он должен перебросить все внутри try
обратно к началу try
, после перемотки он войдет в catch
. Это делает использование try-catch
медленнее.
Если в начале уже есть условие (например, оператор if-else). И утверждение ложно, тогда оно вообще не должно проходить через if
.
Вот где более полезно использовать оператор if-else
, и поэтому вы предпочитаете, чтобы try-catch
был настолько коротким, насколько это необходимо.
Может также стоить проверить свойство Maximum Worker Processes на Ваш пул приложений. Если Вы используете на сессии памяти и имеете больше чем один как макс. рабочий процесс, можно найти проблемы сессии, поскольку пользовательский запрос обработан другим потоком, который не знает об их сессии.
1.) Проверьте, как часто Ваш процесс iis переработан. (Включите вход и проверьте свои настройки). После перерабатывания, с помощью значения по умолчанию в proc хранилище сессии, проиграна сессия.
2.) Ваше приложение порождает Потоки, которые могут выдать Исключение (которые являются btw, не отображенным пользователю)? Поскольку, если та ситуация существует, iis перерабатывает процессы намного чаще.