Fluent nhibernate ASP.NET MVC 3-WebDev服务器使用Fluent NHibernate泄漏内存?
我有一个ASP.NET MVC 3应用程序,它有一个MS SQL Server 2008远程数据库,通过Fluent NHibernate连接。我有另一个应用程序,它向一个URL发出各种GET请求,从而触发一个新项目被添加到数据库中。每次添加一个项目,我的本地web服务器的内存都会增加大约10万Fluent nhibernate ASP.NET MVC 3-WebDev服务器使用Fluent NHibernate泄漏内存?,fluent-nhibernate,asp.net-mvc-3,Fluent Nhibernate,Asp.net Mvc 3,我有一个ASP.NET MVC 3应用程序,它有一个MS SQL Server 2008远程数据库,通过Fluent NHibernate连接。我有另一个应用程序,它向一个URL发出各种GET请求,从而触发一个新项目被添加到数据库中。每次添加一个项目,我的本地web服务器的内存都会增加大约10万 public ActionResult AddItem(string text) { using (var DatabaseSession = new FluentDat
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");
}
public ActionResult附加项(字符串文本)
{
使用(var-DatabaseSession=new-FluentDatabase().Session)
使用(var tx=DatabaseSession.BeginTransaction())
{
Item=数据库会话
.QueryOver()
.其中(x=>x.Text==Text)
.SingleOrDefault();
如果(项==null)
item=new…//初始化
item.Text=文本;
DatabaseSession.SaveOrUpdate(项目);
tx.Commit();
DatabaseSession.Flush();
}
返回操作(“索引”);
}
我知道这不是向数据库添加项目的理想方式,但这只是对其他一些功能的测试。在大约1000次调用此方法后,服务器占用了超过1gb的数据!不久之后,我的内存用完了,它崩溃了。这没有多大意义,因为所有的项目都应该被垃圾收集。这里有我遗漏的东西吗?找到问题的最简单方法是使用一些内存探查器,它们会显示哪些对象保留在内存中以及谁持有它们:
在事务中,您不需要调用Flush,只需调用commit。我也这么认为,但当我没有调用Flush时,它并没有更新我的数据库。似乎MS CLR Profiler使我能够分析exe或IIS托管的ASP.NET项目。但是,我正在使用开发服务器在本地计算机上运行它,所以当我尝试“评测ASP.NET”时,它会查找IIS。@Wesley,最好在IIS下测试应用程序,因为开发服务器(Cassini)在许多情况下的工作方式与IIS不同。