LINQ를 사용하여 상당히 큰 데이터 세트를 생성해야하는 경우 (몇 초 정도 소요될 수 있습니다.)) % '에 대한 사용에 대한 피드백을 생성합니다. 이것을 쉽게/선호하는 방법으로 사용할 수 있습니까?대용량 데이터 세트에서 LINQ 표현식을 실행하는 동안 진행 상황을보고하는 방법
예, 나는 1000 개 자동차 1000 개 트럭 목록 B에 목록 A를 갖고 있다고 나는 가능한 모든 주문 (자동차, 트럭) 쌍을 선택하려는 car.color == truck.color 링크이 :
var pairs = from car in A
from truck in B
where car.color==truck.color
select new {car, truck};
이제 어떤 점에서 이것은 중첩 된 foreach 루프의 집합으로 평가됩니다. 나는 그것이 완료되고 이상적으로 진행 막대 또는 무엇인가를 업데이트 할 때 완료되는 % '나이를보고 할 수 있기를 원합니다.
편집 : 나는이를 실행하고 있기 때문에이 작업을 수행
mPairs = pairs.ToList();
: 그냥 내 쿼리 후에, 나는 (실행 쿼리를 강제로)이 같은 목록으로 멤버 변수에 결과를 저장 UI 스레드에서 필요에 따라 LINQ 식을 계산할 때 UI 스레드가 멈추길 원치 않는 것처럼 백그라운드 작업자 스레드 (이것은 Silverlight BTW에 있음). 따라서 진전 상황을보고하고자하는 이유 UX는 기본적으로 이것이다 :
- 사용자는 엔진은 다음 작업 공간의 다른 모든 항목에 (많은) 연결 가능성을 확인하기 위해 백그라운드 스레드에서 차기 작업 공간
- 에 항목을 드래그.
- 엔진에서 UI를 계산하는 동안 새 연결을 허용하지 않고 새 항목이 다른 항목에 "연결할 수 있음"을 나타내는 보고서가 진행됩니다 (LINQ를 통해 아직 사용되지 않은 가능한 연결 경로가 모두 결정됨).
- 엔진이 계산 (쿼리)을 완료하면 해당 항목을 UI에 연결할 수 있으며 가능한 연결 경로가 나중에 사용할 수 있도록 로컬 변수에 저장됩니다 (예 : 사용자가 항목을 연결하기 위해 클릭하면 가능한 모든 경로가 표시됨). (유사한 과정이 항목의 삭제에 일어나야)가 추가 될 때
) 계산이 있었는지에 따라 강조된
나는이 접근법을 정말 좋아합니다. 내 LINQ 표현식은 몇 가지 중첩 된 것으로 구성되어 있습니다. - 적어도 너무 많은 업데이트 진행에 대한 오버 헤드가 발생하지 않기 때문에 어쨌든 내가 필요로하는 전체 진행률 표시기를 얻으려면 가장 바깥 쪽 목록에이 값을 넣을 수 있습니다. – caryden