2015-05-29 5 views
0

У меня есть приложение, в котором я использую Entity Framework для взаимодействия с базой данных MS SQL. В нем я делаю вызовы в Dbcontext внутри блоков. Проблема, с которой я столкнулась, заключается в том, что даже после удаления Dbcontext SPID сидит там со статусом спящего режима до выхода приложения. Как удалить эти висячие SPID?Удалите SPID после LINQ в Entity Framework

+2

При использовании с Sql-сервером Entity Framework использует пул соединений, предоставляемый поставщиком .NET, что означает, что соединения хранятся в пуле процессом и перераспределяются по мере необходимости. Вы не хотите отключать пул соединений - это значительно повышает производительность. – StuartLC

+0

Есть ли способ освободить эти соединения быстрее? – bgrachus

+0

Возможно, вам удастся уменьшить время ожидания (время ожидания 4 минуты)] (https://msdn.microsoft.com/en-us/library/8xx3tyca (v = vs.110)) .aspx), но я лично оставил бы это в покое. Соединение пула значительно улучшает производительность вашего приложения и существует уже целую вечность. Также обратите внимание, что нет необходимости в корреляции между продолжительностью жизни DbContext и соединением - DbContext будет захватывать соединение из пула и освобождать его как можно скорее. Вы можете проверить, выпущен ли через трассировку 'sp_reset_connection' – StuartLC

ответ

1

Вы, вероятно, не хотите, но это должно работать:

((SqlConnection)dbContext.Database.Connection).ClearAllPools(); 

Как уже упоминалось выше, это может и негативно повлиять на производительность вашего приложения (и, возможно, других приложений). Возможно, реальный вопрос может быть, почему вы хотите удалить SPID?

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

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