2011-10-04 2 views
1

DataContext DB를 사용하여 많은 양의 데이터를 저장하는 경우. 데이터 수가 증가하면 성능이 매우 느려질 것입니다.DataContext 데이터 수가 큰 경우 성능이 좋지 않음

데이터 개수는 약 6000 레코드입니다.

하나의 데이터와 SubmitChange를 삽입하면 SubmitChange 비용이 1.X 초가됩니다.

성능을 향상시킬 방법이 없습니까? 아니면 제한 사항입니까?

고마워요.

+4

** 0 % 투표 수는 ** 어쩌면 질문에 대한 답변을 수락해야합니다. – V4Vendetta

+0

먼저 전화로 6000 개의 항목을 한꺼번에로드하거나 변경해야하는 이유는 무엇입니까? 모바일에서 경량 고 반응 애플리케이션 구현. 적용되어야하는 페이징 및 해칭 개념이 있습니다. –

답변

2

직접 테스트하지 않았지만 각 삽입 후에 SumbitChanges()으로 전화하지 않으려 고합니다. 6000 개의 삽입물을 모두 수행 한 다음 SubmitChanges()을 한 번만 호출하십시오. DataContext은 변경 한 사항을 모두 알고 있어야합니다.

var _db = new YourDbContext(); 

for(int i = 0; i < 6000; i++) 
{ 
    FoobarObj newObject = new FoobarObj() 
    { 
     Name = "xyz_" + i.ToString(); 
    }; 

    _db.FoobarObjects.InsertOnSubmit(newObject); 
} 

_db.SubmitChanges(); 
+0

내 케이스가 망고 WP7에 있습니다 ... AP가 10 초 이상 수행 할 수없는 것과 같은 제한 사항이 있습니다. 너무 많은 데이터를 축적하면 submitChange 비용이 매우 오래 소요됩니다. 당신이 제공하는 코드를 사용해도, 5000을 넘는 데이터 번호는 하나의 데이터를 삽입하는데 약 1 초의 비용이 소요됩니다 ..... 너무 느립니다. – user588477

1

1 초는 너무 길게 들립니다. 내가 측정 한 것보다 훨씬 오래.

using(var dc = new MyDc(@"isostore:/stuff.sdf")) 
{ 
    if(!dc.DatabaseExists()) 
     dc.CreateDatabase(); 

    dc.Data.InsertAllOnSubmit(
     Enumerable.Range(0, 6000).Select(i => new MyData { Data = "Hello World" })); 
    dc.SubmitChanges(); 
} 

나는 6000 개 일괄 MS 당 1 ~ 2 항목의 속도로 삽입 할 수 있으며, 데이터 크기가 성장을 계속하는이 꽤 안정 유지 : 사소한 테스트에서 그냥했다. 작은 배치 (예 : 5 개 항목)로 변경하면 항목 당 약 10 밀리미터로 떨어집니다. 왜냐하면 datacontext를 초기화하는 데 소요되는 오버 헤드가 상당히 많아서 실행 시간을 지배하기 때문입니다.

그래서 다른 일이 계속되어야합니다. 삽입하려는 내용에 대해 자세히 설명해 주시겠습니까? 아마 문제를 끝까지 보여 주는 코드 샘플일까요?

관련 문제