Как я могу остановить System.OutOfMemoryException при массовой вставке - PullRequest
1 голос
/ 25 июля 2010

Привет. Я ввожу в память около 100000 записей, очищаю их и вставляю в новую таблицу. Вставив около 2000 записей, я получаю следующее исключение.

Первое исключение типа Произошло исключение System.OutOfMemoryException в Iesi.Collections.DLL Первый шанс исключение типа 'FluentNHibernate.Cfg.FluentConfigurationException' произошло в FluentNHibernate.DLL

Я использую Fluent NHibernate. но я не уверен, что проблема связана с беглым NHibernate.

Какой лучший способ сделать массовые вставки в БД, мне интересно, стоит ли использовать stringbuilder и вместо этого создавать SQL-запрос. Любые указатели высоко ценится.

Ответы [ 2 ]

4 голосов
/ 25 июля 2010

Хотя я уверен, что существует множество методов, которые вы можете использовать для выполнения такого рода операций в режиме гибернации, вполне вероятно, что вам лучше было бы сконструировать операцию очистки данных как оператор SQL и запустить ее насама база данных.Если вам нужно регулярно его запускать, вы можете рассмотреть хранимую процедуру.

1 голос
/ 25 июля 2010

Попробуйте использовать сеанс без сохранения состояния:

object[] objectsToInsert = GetObjectsToInsert();

using (var statelessSession = sessionFactory.OpenStatelessSession())
using (var transaction = statelessSession.BeginTransaction())
{
    foreach (var objectToInsert in objectsToInsert)
    {
        statelessSession.Insert(objectToInsert);
    }
    transaction.Commit();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...