2011-07-17 7 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) ); } 

내가 놓친 try-catch 구조와 유령 종류.

최고의 솔루션을 찾도록 도와주세요.

+0

모든 행 또는 4000 행을 절약하는 것은 꽤 극단적 인 분할입니다. 100, 200의 절약을 시도 했습니까? –

+0

물론 생산성이 떨어집니다. 그러나 4000은 임의로 선택됩니다.) 그러나 빠르게 작동합니다! – artzub

답변

1

많은 양의 데이터를 복사 할 때 SqlBulkCopy을 사용할 수 있습니다. 그것은 SQL 라이트로 시도했지만 작동해야합니다.

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

관련 문제