NHibernate начать транзакцию и фиксацию без утверждений занимает более 4 секунд
Я запустил Nh-Prof на нашем производстве и обнаружил, что время для открытия сеанса NHibernate, начала транзакции и фиксации иногда занимает более 4 секунд, даже если нет состояния / запросов к базе данных.
** Я знаю, что открытая транзакция и фиксация ее без причины (без утверждений) является ошибкой.
Вот что я вижу в Nh-Prof:
begin transaction with isolation level: Unspecified
commit transaction
Какие-либо предложения?
1 ответ
Наиболее вероятная причина:
используемый сеанс "полон" объектов, и при фиксации проверяет каждый объект, изменился ли он, чтобы сгенерировать оператор обновления. Даже если ничего не изменилось, проверка обходится дорого.
Ты можешь проверить session.GetSessionImplementation().PersistenceContext.EntitiesByKey.Count
чтобы увидеть, сколько там объектов.
Что вы можете с этим поделать:
- не используйте этот сеанс для загрузки данных только для чтения (например, заполнение сетки только для чтения)
- используйте session. Evict по пути к объектам, которые вам больше не нужны для транзакции и не изменились