2010-01-20 3 views
3

Я пытаюсь вставить около 16000 записей в одну таблицу. Поскольку это очень медленно, я хотел бы вставить их в пакет. Тем не менее, я всегда получаю ошибку тайм-аута, когда я пытаюсь это сделать. Поэтому у меня есть два вопроса:Свободное время ожидания команды NHibernate во время пакетной вставки

  1. Каков наилучший способ ускорения вставок?
  2. Как увеличить значение таймаута соединения?
+0

Вы используете сеанс без гражданства? –

+0

Что такое сессия без гражданства? (Я очень новичок в Fluent и NHibernate). –

ответ

5

Сначала вы должны использовать сеанс без гражданства. Вместо вызова OpenSession(); (на фабрике сеансов) вы вызываете OpenStatelessSession(); Он имеет те же самые api, что и обычный сеанс, но нет кэширования и прочее (намного быстрее для операций с объемными данными). Затем вам нужно установить размер партии, вызывая .AdoNetBatchSize ([[размер партии]]); где вы устанавливаете базу данных в своей конфигурации.

Это может сделать трюк. Но вы должны знать, что это не ретрансляция, для которой построен nhibernate (или любой другой orm), поэтому не рассчитывайте на какую-либо производительность.

+1

Ну, это заняло более 20 минут (я никогда не позволяю этому закончить полностью). Использование этого метода занимает всего несколько секунд. Спасибо! –

+0

Отлично. Рад, что смог помочь. –

Смежные вопросы