NHibernate начать транзакцию и фиксацию без утверждений занимает более 4 секунд

Я запустил Nh-Prof на нашем производстве и обнаружил, что время для открытия сеанса NHibernate, начала транзакции и фиксации иногда занимает более 4 секунд, даже если нет состояния / запросов к базе данных.

** Я знаю, что открытая транзакция и фиксация ее без причины (без утверждений) является ошибкой.

Вот что я вижу в Nh-Prof:

begin transaction with isolation level: Unspecified
commit transaction

Какие-либо предложения?

1 ответ

Наиболее вероятная причина:

используемый сеанс "полон" объектов, и при фиксации проверяет каждый объект, изменился ли он, чтобы сгенерировать оператор обновления. Даже если ничего не изменилось, проверка обходится дорого.

Ты можешь проверить session.GetSessionImplementation().PersistenceContext.EntitiesByKey.Count чтобы увидеть, сколько там объектов.

Что вы можете с этим поделать:

  • не используйте этот сеанс для загрузки данных только для чтения (например, заполнение сетки только для чтения)
  • используйте session. Evict по пути к объектам, которые вам больше не нужны для транзакции и не изменились
Другие вопросы по тегам