Приведенный ниже код возвращает 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();
}
Я не уверен, какое влияние будет использовать транзакция, но вы можете попробовать это:
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();
}