我需要向数据库插入大量数据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 构造和幽灵类型。
帮我找到最好的解决方案!