Утечка памяти NHibernate - PullRequest
4 голосов
/ 14 мая 2010

В моей компании есть приложение ASP.Net, которое исчерпывает память и выбрасывает исключения из памяти после всего лишь нескольких дней активности наших клиентов. Я могу воспроизвести ошибку в нашей тестовой среде, и я создал дамп зависания с помощью adplus. Глядя на самые большие / большинство объектов в куче, я заметил, что у нас более 500 000 объектов NHibernate.SqlCommand.Parameter. Это не может быть правильным! У нас было всего 33 экземпляра сессионных заводов, и у нас есть 1 сессионный завод на клиентскую базу данных. Используемая нами версия nhibernate - 2.1.0.4000.

Мы отключили кэш второго уровня, кэш плана запросов и кеш запросов. Мы по-прежнему видим 500 000 NHibernate.SqlCommand.Parameter в дампе памяти.

Кто-нибудь видел такое поведение?

1 Ответ

1 голос
/ 18 мая 2010

У нас похожая проблема с нашим приложением (NHibernate 2.1.2.4000, ODP.net 2.111.7.0 в Windows 7). Когда мы вставляем данные в базу данных, мы получаем огромную память и обрабатываем утечку:

for (int i=1;i<10000;i++)
{
    using (var session = _sessionFactory.OpenSession();
    {
        var tx = session.OpenTransaction()
        // insert a few rows into one table
        tx.Commit()
    }
}

Единственное решение проблемы - установить Enlist = false в строке подключения или использовать OracleClientDriver вместо OracleDataClientDriver. Эта проблема не возникала в NHibernate 1.2. Когда мы попробовали это с TransactionScope, произошла еще большая утечка соединения.

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