ASP.NET MVC 3 - WebDev服务器使用流畅的NHibernate泄漏内存?

时间:2011-02-19 00:39:33

标签: fluent-nhibernate asp.net-mvc-3

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

    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的数据!不久之后,我的内存不足而且崩溃了。它没有多大意义,因为所有的项目都应该被垃圾收集。这里有什么我想念的吗?

1 个答案:

答案 0 :(得分:5)

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

  1. MemProfiler,付费,http://memprofiler.com/

  2. CLR Profiler,免费,.Net 4的Microsoft CLR Profiler - http://www.microsoft.com/downloads/en/details.aspx?FamilyID=be2d842b-fdce-4600-8d32-a3cf74fda5e1,.Net 2和3.5的CLR Profiler - http://www.microsoft.com/downloads/en/details.aspx?FamilyID=a362781c-3870-43be-8926-862b40aa0cd0。这是一份文档 - http://msdn.microsoft.com/en-us/library/ff650691.aspx