Ich verwende NHibernate in meiner ASP.NET-Anwendung, um eine Verbindung zu einer MS SQL Server 2005-Datenbank herzustellen. In einigen Fällen muss ich meine eigenen SQL-Abfragen schreiben. Allerdings bemerkte ich, dass der SQL Server-Thread etwa 50 KB Speicher Lecks jedes Mal, wenn ich das folgende Stück Code ausführen:Speicherverlust bei Verwendung der Zeit in NHibernate SQL-Abfrage
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();
Wenn ich in Windows Task-Manager sehe ich sehe, dass der Prozess sqlservr.exe
erhöht die Speichernutzung durch 50 KB jedes Mal, wenn ich diesen Code ausführen.
Hier ist der wirklich interessante Teil. Wenn ich im obigen Code "yyyy-MM-dd HH:mm:ss"
durch "yyyy-MM-dd HH:mm"
ersetze (d. H. Ich entferne die Sekunden), werden die Speicherlecks gestoppt.
Update: Anscheinend die Speicherlecks nicht wirklich aufhören. Sie zeigen nur einmal pro Minute. Vermutlich wenn sich die SQL-Abfrage ändert.
Die zurückgegebenen Ergebnisse sind in beiden Fällen identisch.
Hat jemand eine Ahnung, was hier vor sich geht?
Können Sie erklären, wie Sie zu der Schlussfolgerung gekommen sind, dass SQL Server undicht ist? –
Wenn ich in Windows-Task-Manager sehe, sehe ich, dass der Prozess sqlservr.exe seine Speicherauslastung bei jeder Ausführung dieses Codes um 50 KB erhöht. Das habe ich auch zu der Frage hinzugefügt. –