Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fluent nhibernate ASP.NET MVC 3-WebDev服务器使用Fluent NHibernate泄漏内存?_Fluent Nhibernate_Asp.net Mvc 3 - Fatal编程技术网

Fluent nhibernate ASP.NET MVC 3-WebDev服务器使用Fluent NHibernate泄漏内存?

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

我有一个ASP.NET MVC 3应用程序,它有一个MS SQL Server 2008远程数据库,通过Fluent NHibernate连接。我有另一个应用程序,它向一个URL发出各种GET请求,从而触发一个新项目被添加到数据库中。每次添加一个项目,我的本地web服务器的内存都会增加大约10万

    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的数据!不久之后,我的内存用完了,它崩溃了。这没有多大意义,因为所有的项目都应该被垃圾收集。这里有我遗漏的东西吗?

找到问题的最简单方法是使用一些内存探查器,它们会显示哪些对象保留在内存中以及谁持有它们:

  • MemProfiler,付费

  • CLR分析器,免费,适用于.Net 4的Microsoft CLR分析器,.Net 2和3.5的CLR分析器- . 这是一份文件-


  • 在事务中,您不需要调用Flush,只需调用commit。我也这么认为,但当我没有调用Flush时,它并没有更新我的数据库。似乎MS CLR Profiler使我能够分析exe或IIS托管的ASP.NET项目。但是,我正在使用开发服务器在本地计算机上运行它,所以当我尝试“评测ASP.NET”时,它会查找IIS。@Wesley,最好在IIS下测试应用程序,因为开发服务器(Cassini)在许多情况下的工作方式与IIS不同。