Объем вставляет с Spring / В спящем режиме

Я думаю, что это выглядит действительно интересным (+1), но одна вещь остерегаться: компилятор C# довольно хорош в оптимизации операторов переключения. Не только для того, чтобы сорвать - Вы получаете совершенно другой IL в зависимости от того, сколько случаев Вы имеете и так далее.

Ваш определенный пример действительно делает что-то, что я нашел бы очень полезным - нет никакого синтаксиса, эквивалентного для преобразования регистра типом, поскольку (например) typeof(Motorcycle) не константа.

Это становится более интересным в динамическом приложении - Ваша логика здесь могла быть легко управляемой данными, дав выполнение стиля 'механизма правила'.

8
задан Laurent K 3 August 2009 в 13:40
поделиться

4 ответа

Согласно моим тестам, приведенный выше ответ никогда не генерирует значение 10000. Вероятно, это не большая проблема, когда вы генерируете случайное число от 1 до 10000, но тот же алгоритм между 1 и 5 будет заметен. Добавьте 1 в свой мод.

Это сбрасывает и очищает сеанс гибернации и останавливает его слишком большой рост (возможно, поэтому ваши 100 000 объектов занимают так много времени).

Кроме того, если вы используете генератор идентификаторов идентификаторов, гибернация автоматически отключит пакетную вставку. Пакетные вставки улучшат производительность. Вам также нужно будет указать свойство конфигурации hibernate.jdbc.batch_size, эквивалентное вашему количеству времени 100.

Источником этого была Java Persistence with Hibernate Мэннинга (отличная книга - много раз спасала мой скин).

7
ответ дан 5 December 2019 в 10:43
поделиться

Вы также можете рассмотреть возможность использования StatelessSession , поскольку он разработан для массовых операций.

StatelessSession ss=sessionFactory().openStatelessSession();
Transaction tx=ss.beginTransaction();
6
ответ дан 5 December 2019 в 10:43
поделиться

Иногда ORMapper не подходит для гвоздя. В частности, пакетные операции часто более производительно выполняются с использованием старого простого JDBC. Это, конечно, зависит от множества условий, но вы должны хотя бы рассматривать это как вариант и сравнивать производительность обоих подходов.

3
ответ дан 5 December 2019 в 10:43
поделиться

It's not purely a database insert performance issue; if you are creating tens of thousands of objects and not performing a flush, the Hibernate session will grow until you run out of memory.

0
ответ дан 5 December 2019 в 10:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: