1

sqlitedbに大量のデータを挿入する必要があります。
私は使用し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 構造とゴースト タイプを見逃していました。

最善の解決策を見つけるのを手伝ってください!

4

1 に答える 1

1

を使用して、SqlBulkCopy大量のデータをコピーできます。SQL lite で試したことはありませんが、動作するはずです。

リンク 1
リンク 2

アップデート :

Marc Gravellによる良い答えがあります。一括挿入の方法 - linq-to-entities

于 2011-07-17T15:55:54.563 に答える