【发布时间】:2009-03-09 13:44:22
【问题描述】:
我在我的 ASP.NET 应用程序中使用 NHibernate 来连接到 MS SQL Server 2005 数据库。在某些情况下,我需要编写自己的 SQL 查询。但是,我注意到每次执行以下代码时,SQL Server 线程都会泄漏大约 50 KB 的内存:
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 KB 的内存使用量。
这是真正有趣的部分。如果我在上面的代码中将"yyyy-MM-dd HH:mm:ss" 替换为"yyyy-MM-dd HH:mm"(即我删除秒数),内存泄漏就会停止。
更新:显然内存泄漏实际上并没有停止。他们只是每分钟显示一次。大概是当 SQL 查询发生变化时。
两种情况下返回的结果是一样的。
有人知道这里发生了什么吗?
【问题讨论】:
-
您能否解释一下您是如何得出 SQL Server 泄漏的结论的?
-
当我查看 Windows 任务管理器时,我看到进程 sqlservr.exe 每次运行此代码时都会增加 50 KB 的内存使用量。我也将其添加到问题中。
标签: sql-server sql-server-2005 nhibernate datetime memory-leaks