2010-08-19 6 views
2

영어로 죄송합니다. 그래서, 여기에 내 질문에 내가 PLINQ 여기 으로 DataTable을 업데이트하기 위해 노력하고있어 것은 내 코드PLINQ 업데이트가 실패했습니다.

DataTable table = new DataTable(); 

table.Columns.Add(new DataColumn("val", typeof(decimal))); 

int N = 1000000; 

for (int i = 0; i < N; i++) table.Rows.Add(new object[] { i }); 

table.AsEnumerable().AsParallel().ForAll(row => row["val"] = 3); 

입니다 그러나 예외가있다 : "인덱스가 범위를 벗어났습니다 크기보다 음이 아닌 덜이어야합니다. 컬렉션의 매개 변수 이름 :. 인덱스 "

, 나에게

+0

왜 DataTable에 행을 추가 하시겠습니까? DataTable은 데이터베이스에서 데이터를 검색합니다. DataTable을 편집하는 것보다 강하게 유형이 지정된 객체에 데이터를 저장하는 것이 좋습니다. – Wix

+0

작은 예제 일뿐입니다. Ofcourse 그것의 인공적인보기 및 나는 데이타베이스에서 줄을 얻고있다. 마지막 줄이 전부입니다. 어떻게하면 plinq 내에서 데이터 테이블의 행을 업데이트 할 수 있습니까? – feniks

+0

OK, 이것을 확인할 수 있습니다. 그리고 그것은 일어나지 않아야하는 것처럼 보입니다. 더 많은 것을 찾으려고 노력 중입니다. –

답변

3

잘 도와주세요, 내가 지금 말할 수있는합니다 (DataTable 클래스에 대한 MSDN 문서에서) modifying the rows of a DataTable in parallel is not Kosher :

이 유형은 다중 스레드 된 읽기 작업에 안전합니다. 쓰기 작업은 과 동기화해야합니다.

그래서 내가 말한 특별한 예외를 일으키는 지 정확히 알 수는 없지만 지원되지 않으므로 실제로 시도해서는 안됩니다.

+0

예, 올바른 답변입니다. –

0

용액 실측치 :..

table.AsEnumerable() AsParallel() FORALL (행 => {로크 (테이블)의 행 [ "발"] = 3});

그러나 그 이후에는 병렬이 적용되지 않습니다.