ASP.NETアプリケーションでNHibernateを使用して、MS SQL Server 2005データベースに接続します。場合によっては、独自のSQLクエリを作成する必要があります。しかし、私は、SQLサーバーのスレッドがメモリのおよそ50キロバイト、私は次のコードを実行するたびにリークしていることに気づいた:NHibernate SQLクエリで時間を使用するとメモリリークが発生する
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"
に置き換えた場合(つまり、秒を削除した場合)、メモリリークが停止します。
更新:明らかにメモリリークは実際には止まらない。彼らは代わりに1分に1回だけ表示します。おそらくSQLクエリが変更されたとき。
戻り値はどちらの場合も同じです。
ここで何が起こっているのか誰かが気付いていますか?
SQL Serverが漏れているという結論にどのようになったのか説明できますか? –
Windowsのタスクマネージャを見ると、このコードを実行するたびにプロセスsqlservr.exeのメモリ使用量が50KB増加することがわかります。私はその質問にもそれを加えました。 –