2016-10-17 3 views
-1

생산자 고객 패턴 내에서 Blocking Collection을 사용하고 있습니다. 프로그램 속도를 높이려면 소비자 프로세스를 일괄 처리해야합니다. 차단 컬렉션 (50 개 항목)의 항목 목록을 한 번에 하나씩 처리하십시오.차단 컬렉션이있는 일괄 소비자

그래서 queue.GetConsumingEnumerable() 대신 행운을 넣어 queue.Take(50)을 사용해 보았습니다. 차단 컬렉션을 사용하여 재검토해야합니까? 당신은 50 개 항목을 받고 있지만, 컬렉션 그들 모두를 떠나 될 겁니다 서면 queue.Take(50)

답변

0

는 열거 소비 에 LINQ Take 방법 (대신 BlockingCollectionTake 방법)을 사용하고 있습니다.

50 개 항목을 얻고 싶다면 queue.GetConsumingEnumerable().Take(50)을 사용할 수 있습니다. 그런 다음 50 개 항목을 가져 와서 실제로 컬렉션에서 제거되는 것을 확인할 수 있습니다. 쿼리 처리를 시작하기 전에 50 개의 항목을 모두 얻고 싶다면 쿼리를 구체화 (ToList 또는 이와 동등한 방법 사용)해야합니다. (가능성이 높으면 처리 속도가 빨라지지 않을 수도 있지만 속도가 느려지 겠지만 요청한 바입니다.)

+0

블링킹 컬렉션의 항목 수가 내 배치 크기보다 적 으면 완료되었습니다 요소를 추가합니다. 무슨 일이 일어날 것? 나는 아직도이 요소들을 사용할 수 있습니까? – mhd

+0

@mhd 부분 배치가 나옵니다. – Servy

+0

나는 queue.GetConsumingEnumerable()을 시도했다. 그러나 Take (50)은 0 또는 1 개의 항목을 반환하지 않는다. 0 – mhd

관련 문제