Я использую NHibernate в своем приложении ASP.NET для подключения к базе данных MS SQL Server 2005. В некоторых случаях мне нужно написать свои собственные запросы SQL. Однако я заметил, что поток SQL-сервера теряет около 50 КБ памяти каждый раз, когда я выполняю следующий фрагмент кода:
NHibernate.ISession session = NHibernateSessionManager.Instance.GetSession();
ISQLQuery query = session.CreateSQLQuery(
"select {a.*} from t_alarm a where a.deactivationtime > '" +
DateTime.UtcNow.ToString("yyyy-MM-dd HH:mm:ss") +
"'");
query.AddEntity("a", typeof(TAlarm));
System.Collections.IList aList = query.List();
Когда я смотрю в диспетчере задач Windows, я вижу, что процесс sqlservr.exe
увеличивает использование памяти на 50 КБ при каждом запуске этого кода.
Вот действительно интересная часть. Если я в приведенном выше коде заменим "yyyy-MM-dd HH:mm:ss"
на "yyyy-MM-dd HH:mm"
(т.е. я уберу секунды), утечки памяти прекратятся.
Обновление: очевидно, утечки памяти на самом деле не прекращаются. Они просто показывают один раз в минуту вместо этого. Предположительно при изменении SQL-запроса.
Возвращенные результаты одинаковы в обоих случаях.
Кто-нибудь знает, что здесь происходит?