我需要将大量数据插入到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构造和鬼类型。
帮我找到最佳解决方案!
答案 0 :(得分:1)
您可以使用SqlBulkCopy
复制大量数据。 Hav没有尝试过使用SQL lite,但它应该可以工作。
更新:
Marc Gravell给出了一个很好的答案。 how-to-do-a-bulk-insert-linq-to-entities