ASP.NET MVC 3 - утечка памяти на сервере WebDev с помощью свободного NHibernate? - PullRequest
3 голосов
/ 19 февраля 2011

У меня есть приложение ASP.NET MVC 3 с удаленной базой данных MS SQL Server 2008, подключенной через Fluent NHibernate.У меня есть другое приложение, которое делает различные запросы GET к URL, который вызывает добавление нового элемента в базу данных.Каждый раз при добавлении элемента память моего локального веб-сервера увеличивается примерно на 100 тыс.

    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 вызовов этого метода сервер получает более 1 ГБ данных!Вскоре после этого у меня заканчивается память, и она вылетает.Это не имеет особого смысла, так как все предметы должны собираться мусором.Я что-то упускаю здесь?

1 Ответ

5 голосов
/ 19 февраля 2011

Самый простой способ найти проблему - использовать профилировщик памяти, который покажет вам, какие объекты находятся в памяти и кто их держит:

  1. MemProfiler, платный, http://memprofiler.com/

  2. CLR Profiler, бесплатно, Microsoft CLR Profiler для .Net 4 - http://www.microsoft.com/downloads/en/details.aspx?FamilyID=be2d842b-fdce-4600-8d32-a3cf74fda5e1, CLR Profiler для .Net 2 и 3.5 - http://www.microsoft.com/downloads/en/details.aspx?FamilyID=a362781c-3870-43be-8926-862b40aa0cd0.И вот документация для этого - http://msdn.microsoft.com/en-us/library/ff650691.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...