2010-05-13 2 views
4

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

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

Наблюдается ли какое-либо тело?

+0

Какой драйвер вы используете? –

ответ

1

У нас аналогичная проблема с нашим приложением (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 = ложь в строке соединения или использовать OracleClientDriver вместо OracleDataClientDriver , Эта проблема не произошла в NHibernate 1.2. Когда мы попробовали это с TransactionScope, была еще хуже утечка связи.