2011-07-17 14 views
1

sqlite dbに大量のデータを挿入する必要があります。
私はLinq to Entitiesを使用します。
Linqと大量のデータを追加

大量のデータを追加することに問題があります。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) 
    ); 
} 

私は逃しましたトライキャッチ構造とゴーストタイプがあります。

最高のソリューションをお探しください。

+0

すべての行または4000行を節約することはかなり極端な分割です。あなたは100、または200のように節約しようとしましたか? –

+0

もちろん、生産性が低下します。しかし4000は無作為に選択されていますが、速く動作します! – artzub

答えて

1

大量のデータのコピーにはSqlBulkCopyを使用できます。 SQL Liteで試してみましたが、うまくいくはずです。

Link 1
Link 2

アップデート:ここで

はマルクGravellによって良い答えです。 how-to-do-a-bulk-insert-linq-to-entities

+0

今すぐ試してみましょう...おそらく助けてください – artzub

+0

これは 'DbConnection'では動作しません。 'SQLiteConnection'(' DbConnection')を 'SqlConnection' =(私が' System.Data.SQLite'を使用しています) – artzub

+0

バルク挿入がsqliteでサポートされていないことがわかりましたが、同じこと。 – Jethro

関連する問題