Linq并添加了大量数据

时间:2011-07-17 15:48:14

标签: c# performance linq-to-entities out-of-memory large-data

我需要将大量数据插入到sqlite db 我使用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 个答案:

答案 0 :(得分:1)

您可以使用SqlBulkCopy复制大量数据。 Hav没有尝试过使用SQL lite,但它应该可以工作。

Link 1
Link 2

更新:

Marc Gravell给出了一个很好的答案。 how-to-do-a-bulk-insert-linq-to-entities