我有一個ASP.NET MVC 3應用程序,它有一個MS SQL Server 2008遠程數據庫,通過Fluent NHibernate連接。我有另一個應用程序正在向URL發出各種GET請求,這會觸發將新項目添加到數據庫中。每次添加項目時,本地Web服務器的內存都將增加大約100k。ASP.NET MVC 3 - WebDev服務器泄漏內存與流利的NHibernate?
public ActionResult AddItem(string text)
{
using (var DatabaseSession = new FluentDatabase().Session)
using (var tx = DatabaseSession.BeginTransaction())
{
Item item = DatabaseSession
.QueryOver<Item>()
.Where(x => x.Text == text)
.SingleOrDefault();
if (item == null)
item = new ... // initialize
item.Text = text;
DatabaseSession.SaveOrUpdate(item);
tx.Commit();
DatabaseSession.Flush();
}
return RedirectToAction("Index");
}
我知道這是不是將項目添加到數據庫的理想方式,但是這僅僅是一些其他的功能測試。經過約1000次調用此方法後,服務器佔用了1GB以上的數據!不久之後,我耗盡內存並崩潰。它沒有多大意義,因爲所有的項目都應該被垃圾收集。有什麼我在這裏失蹤?
你不需要在事務中調用Flush,你只需要調用commit。 – Phill 2011-02-19 00:43:53
我也這麼認爲,但是當我沒有調用flush時,它並沒有更新我的數據庫。 – 2011-02-19 00:45:08