Исключение из нехватки памяти: добавьте диапазон

1

Приведенный ниже код возвращает OutOfMemoryException при импорте базы данных, мне нужно импортировать 40000 различных концепций, мой компьютер может удерживать их, но я думаю, что есть некоторые ограничения на то, сколько можно добавить сразу.
Я хочу сделать так, чтобы он добавлял 1000 за раз, сохраняя изменения, а затем повторяет этот процесс, пока он не прошел всю базу данных...
Как это можно сделать?

public static void writeOutConcepts(List<Gnome.Data.Concept> concepts, HttpResponseBase    Response)
{
    var ctx = new GnomeContext();
    Response.Write("Writing out concepts: \n");
    Response.Flush();
    try
    {
        ctx.Concepts.AddRange(concepts);
    }
    catch (Exception error)
    {
        Response.Write(error.Message);
        Response.Write(error.StackTrace);
        Response.Flush();
        throw;
    }
    Response.Write("Writing of Concepts complete\n\n");
    ctx.SaveChanges();
}
  • 0
    Посмотрите на оператор модуля?
Теги:
out-of-memory

1 ответ

1
Лучший ответ

Я не уверен, какое влияние будет использовать транзакция, но вы можете попробовать это:

using (var transaction = ctx.Database.BeginTransaction())
{
   int i = 0;
   foreach(var concept in concepts)
   {
      ctx.Concepts.Add(concept);
      i++;

      if (i >= 1000)
      {
         i = 0;
         ctx.SaveChanges();
      }
   }
   ctx.SaveChanges()

   transaction.Commit();
}
  • 0
    Похоже, что это работает, пока нет возможности ... Но ошибка еще не возникла, что указывает на ее работу. Спасибо.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню