Linq и добавление большого количества данных - PullRequest
1 голос
/ 17 июля 2011

Мне нужно вставить большой объем данных в sqlite дБ.
Я использую Linq to Entities.

У меня проблема с добавлением большого объема данных 1M + .
Недостаточно памяти или очень много времени.

Этот код - быстрый, но требует много памяти:

// query - IQueryable of DbfRecord
// db - ObjectContext
int i = 0;
foreach (var item in query) {
    db.AddToKladrs(new Kladr() {
        Id = item.GetField(0),
        ParentId = item.GetField(1),
        RegionId = item.GetField(3),
        Name = item.GetField(2),
        Index = item.GetField(4)
    });
    if(++i % 4000 == 0)
        db.SaveChanges(SaveOptions.AcceptAllChangesAfterSave);
}


Этот код - не ресурс-интенсивный, но очень медленный :

// query - IQueryable of DbfRecord
// db - ObjectContext
foreach (var item in query) {
    db.ExecuteStoreCommand("insert into [Kladr] values({0}, {1}, {2}, {3}, {4})",
        item.GetField(0),
        item.GetField(1),
        item.GetField(3),
        item.GetField(2),
        item.GetField(4)
    );
}

Я пропустил конструкцию try-catch и типы призраков.

Помогите найти лучшее решение!

1 Ответ

1 голос
/ 17 июля 2011

Вы можете использовать SqlBulkCopy для копирования больших объемов данных. Не пробовал с SQL lite, но он должен работать.

Ссылка 1
Ссылка 2

Обновление:

Вот хороший ответ Марка Гравелла. как к делать-а-объемная вставка-LINQ к лицам

...