Это был хороший. У меня было каждое обновление в транзакции, и внутри этой транзакции был запрос, который кэшировался на 2-м уровне, но вызывал сброс. Если у вас есть запросы в транзакции, и FlushMode = Auto (в основном не выключен), вы получаете сброс. Что очень дорого, особенно если у вас много объектов в кеше сессии, что мы и делаем. Удалив этот запрос из транзакции, увеличил время запроса в 5 раз. Более того, сделав все это транзакцией, а не отдельными транзакциями, это стало еще одним большим стимулом, поскольку каждая транзакция.commit вызывает сброс. Обновление 1000 объектов занимает менее 30 секунд, и я слишком смущен, чтобы сказать, как долго это было раньше. Ааа старый код.
Обновление: при дальнейшем исследовании я установил для FlushMode значение Commit для нашей конкретной модели вложенных транзакций. Не вдаваясь в подробности, мы имеем конкретную модель транзакций, которая учитывает вложенные транзакции при использовании вложенных вызовов «логики». Для устаревших приложений мы не хотим устанавливать это повсеместно. Особой проблемой в этом случае является сочетание использования транзакций и установки для параметра FlushMode значения Auto (или Always).