ASP.Net/SQL: после отмены запроса объем памяти не уменьшается (DataBoundControl.PerformSelect) - PullRequest
0 голосов
/ 23 февраля 2011

В производственной среде asp.net 2.0 у нас есть aspx, который запрашивает все виды запросов к базе данных SQL2005.Некоторые запросы займут некоторое время, поэтому мы добавили кнопку отмены.

В коде мы открываем соединение и после этого вызываем command.ExecuteReader ().Мы привязываем его к сетке.

При нажатии кнопки отмены мы вызываем команду. Отмена (), удаление команды, соединения и устройства чтения данных.А также закройте соединение.

После выполнения кода я вижу в SQL profiler запрос отменен.Но w3wp.exe все еще использует много памяти.

Чтобы проверить это, я написал запрос, который возвращает много данных.Через 2 секунды я могу отменить это, и я вижу, что память увеличивается с 250 МБ до почти 2 ГБ.Через некоторое время память не уменьшается.

Я использовал JetBrains dotTrace Memory 3.5, чтобы посмотреть, что происходит с памятью.Что я вижу, так это то, что 66,6% памяти используется DataBoundControl.PerformSelect.Microsoft говорит, что «метод PerformDataBinding вызывается после извлечения данных для привязки данных к элементам элемента управления с привязкой к данным».Но не все данные извлекаются, звонок отменяется.Что происходит и почему память не освобождается?

Кто-нибудь знает, что происходит и / или как решить эту проблему?

1 Ответ

0 голосов
/ 23 февраля 2011

Только то, что вы располагаете ресурсом, не означает, что фреймворк вернет память.Фактически, серверная версия платформы сохранит выделенное пространство памяти для последующего повторного использования.

Как работает сборка мусора в .NET

Оченьполезный блог для понимания внутренних возможностей сборки мусора и производительности

В том же блоге см. блок после третьей заметки.

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