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

标签 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. MemProfiler,付费,http://memprofiler.com/

  2. CLR Profiler,免费,Microsoft CLR Profiler for .Net 4 - 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

关于fluent-nhibernate - ASP.NET MVC 3 - WebDev 服务器使用 Fluent NHibernate 泄漏内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5048047/

相关文章:

c# - NHibernate - KeyNotFoundException : The given key was not present in the dictionary

c# - NHibernate 手动控制抓取

javascript - 从javascript在ViewBag中存储一个值

java - 将我的 asp.net mvc Web 应用程序与基于 Java 的开源 BPM(业务流程管理)软件集成

c# - Linq 查询仅在以点表示法编写时才有效

asp.net-mvc-3 - 具有 ASP.NET MVC3 和嵌入式 Razor View 的插件框架

asp.net-mvc-3 - 使用asp.net mvc和jquery创建google suggest效果

nhibernate - FluentNhibernate 未使用 SQL CE 4.0 创建 Id 列作为身份

c# - N-Hibernate 中的长字符串与 Oracle 导致错误

NHibernate QueryOver 对每个一对多集合进行排序