strFilePath
배열 (각 파일에 약 1 백만 개의 레코드가있는 거의 1000 개의 파일)에 다양한 CSV 파일의 위치가 있습니다. 파일을 읽고 모든 데이터를 단일 데이터 테이블로 병합하는 데 많은 시간이 필요합니다. 그래서 병렬 처리를 진행하기로 결정했습니다.루프 외부 업데이트
현재 코드
DataTable dtMerge=new DataTable();
for(int i=0;i<strFilePath.Count;i++)
{
Parallel.For(0, 3,m =>
{
clsNewClass objCls=new clsNewClass();
DataTable dt=objCls.ReadCSV(strFilePath[m+i]);
});
m+=3;
}
질문은, 어떻게 글로벌 데이터 테이블 dtMerge
에 데이터 테이블 dt
의 모든 데이터를 병합 할 수 있습니다 또는 전역 변수 dtMerge
모든 결과를 포함 할 수 있습니다?
예상 된 코드는 잠금을 사용하지 않고 진행 내부 스레드를 병합 할 수 있도록 스레드 마지막으로 당신에게 지역의 초기화를 제공하고
DataTable dtMerge=new DataTable();
for(int i=0;i<strFilePath.Count;i++)
{
Parallel.For(0, 3,m =>
{
clsNewClass objCls=new clsNewClass();
// Is it possible like the below?
dtMerge = objCls.ReadCSV(strFilePath[m+i]);
});
m+=3;
}
당신은이 꽤 많은 오류를 사용 둥지 이유가 없었다있어 기존 코드에서. 'm'은'm + = 3'에서 선언되지 않고 처음으로 저에게 뛰어납니다. 실제로 당신은'Parallel.ForEach (strFilePath, filepath => {...})' –
을 수행하는 것이 훨씬 낫습니다. 어떻게하면 병합 할 수 있을까요? Parallel.Foreach 안에 잠금 (객체)을 사용하지 않고 어떤 방법이 있습니까? @Scott Chamberlain –