2010-08-13 5 views
0

В веб-сервисе pre-WCF .NET (C#) у меня есть дорогостоящий ресурс IDisposable, на котором я держу ссылку на статический (на самом деле ThreadStatic). (Внутренне он содержит SqlConnection.) Как я могу гарантировать, что это будет доступно при обновлении пула приложений, должен ли я просто подавить предупреждение FxCop и не беспокоиться об этом, или есть третий вариант?Утилизация статических ресурсов в веб-службе

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

ответ

1

Этот проект будет отклонен из-за проблемы с ресурсом подключения. Если у вас были проблемы раньше, вы получите их снова, так как теперь вы будете использовать больше подключений SqlServer (если это поток статический, то каждый поток будет иметь один SqlServer и, что более важно, одно базовое реальное соединение, даже если оно не используется соединение и вернет базовое соединение с пулом).

+0

Очень хорошая точка. Я не выбрал новый дизайн. Что ты предлагаешь? – TrueWill

+1

Вам необходимо пересмотреть проблему с подключением и посмотреть, какова фактическая проблема. Как правило, лучшим шаблоном является открытие соединения, выполнение операции и последующее его закрытие либо с помощью блока в соединении, либо - если вы возвращаете datareader, чтобы его можно было эффективно выполнять, datareader при использовании блок, созданный с помощью опции CloseConnection, так что утилита утилизации - это утилита соединения. Таким образом, «реальное» соединение возвращается в пул ASAP. Ваше изменение здесь усугубляет ситуацию, никогда не возвращая его. Где произошел неправильный шаблон? ... –

+0

... может быть, произошли ошибки между созданием соединения для datareader (и, следовательно, не в использовании) и установкой datareader в использование? Такая ситуация может привести к утечкам (для этого я использую класс-оболочку, который будет удалять соединение в его распоряжении, но когда он успешно создаст datareader с опцией закрытия, «перестанет владеть» соединением, так как теперь это читатель, который будет закройте его. Еще один источник ошибок - если вы используете 'use' на datareader в блоке-интернаторе и, как ошибка или намеренно, никогда не вводите блок использования, потому что первый ... –

Смежные вопросы