그래서 최신 버전인지 확인하는 1000 가지 항목이 있습니다. 이러한 항목 각각에는 수천 개의 파일을 읽어야합니다 (일부 항목은 여러 항목에서 동일한 파일 일 수 있음).Async/Await vs Parellel.For.이 경우 더 좋습니다.
현재이 파일은 TPL (async/await)을 사용하여 구현됩니다. 하나는 읽어야하는 파일 하나는 검사해야하는 각 항목에 하나입니다. 이것은 제 3의 가장 비싼 함수에 대한 프로파일 링을 제외하고는 잘 작동합니다. 스레드 풀에서 TrySteal입니다.
Visual Studio 동시성 뷰어를 사용하면 스레드 관련 시간대의 99 %가 동시에 관련 항목에 소비되고 실행시 1 % 만 소요된다는 것을 알 수 있습니다. 이것이 내가 너무 많은 작업을 생성하고 있다고 생각하게 만듭니다 (참고 : 어디서나 Task.Run을 사용하지 않고 기다리고 있습니다).
Parellel.Async/await를 사용하여 많은 파일을 읽는 것보다 오버 헤드가 적습니까? 태스크 프로그래밍 라이브러리를 사용하면 얼마나 많은 오버 헤드가 예상됩니까?
디스크 하위 시스템의 성능 기능을 사용하고 있는지 확인하기 위해 리소스 모니터 (Windows 작업 관리자의 성능 탭에서 사용 가능)를 선택 했습니까? 그렇다면 문제를 재고해야 할 수도 있습니다. 데이터 캐싱, 여러 드라이브 사용, 적절한 RAID 세트 사용, SSD (s) .... – HABO
아마 둘 다. 대신 _TPL DataFlow_를 고려할 수 있습니다. 각 블록의 메시지를 시간으로 입출력 작업의 수에 적합한 방식으로 제한 할 수 있습니다. – MickyD
네 개의 하드웨어 급습 SSD가 있고 90 %의 파일이 메모리에 있으므로 이미 디스크가 전혀 tick. 거리지 않습니다. 그러나 CPU 사용량은 동시에 실행되는 모든 프로그램에서 100 %이므로 CPU 사용량을 줄여서 최적화하려고합니다. 작업 스케줄러는 큰 부분을 차지하는 것으로 나타났습니다. – user2460953