2009-03-23 3 views
2

두 개의 관련 DataTable (마스터 및 세부 정보)을 포함하는 하나의 DataSet을 보유하고 있습니다. 내 필터와 일치하는 데이터 (예 : 마스터 데이터 열 A = "XXX")를 다른 DataSet으로 복사하고 싶습니다.하나의 DataSet에서 다른 DataSet으로 데이터를 루프 및 복사하는 가장 빠른 방법

이제이 프로세스가 매우 오래 걸리는 것으로 나타났습니다. (1k 기록에 대해 약 1 시간)

이 처리 시간을 개선하는 방법을 알고 싶습니까?

감사합니다, 에크

당신은 시도 할 수도
+0

이것은 의미가 없습니다. DataSet을 가지고 있다면 메모리와 1K 레코드가 있음을 의미합니다. 각 행을 반복해서 반복하여 10 회 반복하더라도 1 시간이 걸리지 않습니다. 코드를 보여주세요. – Ruslan

답변

2

1000 개의 레코드를 복사하는 데 몇 밀리 초 밖에 걸리지 않습니다. 이상한 일을 더 발사 이벤트 또는 데이터 바인딩이 없는지 확인합니다 .. 아마 당신은 관계없이 시도해야하지만, 저는 믿습니다 enforcecontraints = 또한 외래 키 체크를 해제 거짓 ..

다음 코드를 복사

완전한 데이터 세트 꽤 빨리 :

fDstDataSet.EnforceConstraints = false; 
foreach (DataTable fSrcTable in fSrcDataSet.Tables) 
{ 
    DataTable fDstTable = fOpenOrders.Tables[fSrcTable.TableName]; 
    foreach (DataRow fSrcRow in fSrcTable.Rows) 
    { 
     fDstTable.ImportRow(fSrcRow); 
    } 
} 
fDstDataSet.EnforceConstraints = true; 
+0

이와 같은 DataSet에 대한 EnforceConstraints는 실제 데이터베이스 제약 조건이 아닌 메모리 데이터 집합의 제약 조건 일뿐입니다. DataAdapter에서 채워진 간단한 테이블이 있으면 일반적으로 제약 조건이 없습니다. –

1

; 당신은 더 자세히 문제를 요약 몇 가지 이점을 얻을 수 DataRow[]

0

을 반환

myDataSet.Tables[0].Select("A = 'xxx'"); 

은 - 다음 데이터를 복제하는 더 나은 옵션이있을 수 있습니다.

당신이 정말로 당신이 DataView를 클래스를 확인하시기 바랍니다이 길을 가고 싶은 경우

는 :

http://msdn.microsoft.com/en-us/library/system.data.dataview.aspx

이렇게하면 데이터 테이블에서 필터를 기반으로 데이터를 추출 할 수 있습니다. 이것은 DataView를에서 선택한 행을 기반으로 데이터 테이블을 반환합니다

http://msdn.microsoft.com/en-us/library/system.data.dataview.totable.aspx

다음 DataView를 또한 ToTable하는 방법이있다.

다른 옵션이 빠른 구현을 다시 제공하는지 확신 할 수는 없지만 버전이 더 우수해야합니다. 위의 DataTable.Select는 DataView보다 성능이 우수합니다.

관련 문제