2012-03-06 4 views
1

나는 BlockingCollection을 가지고 있으며이 컬렉션은 다른 스레드에서 다중 생성자 함수로 채워진다.다중 소비자에서 TextWriter를 사용하는 방법?

내 소비자 함수는 파일에 컬렉션 항목을 쓰지만 확장 가능하지는 않습니다. 단일 소비자 만 있습니다.

다중 제작자 및 다중 소비자 구현이 필요합니다.

Write 메서드를 사용하기 전에 TextWriter.Synchronized() 및 Lock을 사용할 수 있지만 단일 TextWriter를 사용하면 동일한 실행 시간이 낭비 될 수 있습니다.

답변

0

귀하의 텍스트 작성자는 디스크의 입출력 속도에 의해 병목 현상이 발생할 수 있습니다. 멀 리복크 (mulitocre) proc가 HDD보다 훨씬 뛰어난 성능을 발휘하기 쉽습니다. 여러 명의 작가가 있다면이를 해결하지 않을 것입니다. 디스크 경쟁으로 인해 더 악화 될 것입니다.

효과적인 wiriter를 구현했다고 가정하면 가장 좋은 해결책은 대기열에 최대 개수의 항목을두고 여기에 병목 현상을 수용하는 것입니다.

더 빠르게 진행해야하는 경우 (솔리드 스테이트 또는 RAID 등) 더 빠른 디스크를 얻거나 BinaryWriter을 사용하여 이진 파일을보고 그 파일에 쓸 수 있습니다. 또는 당신이 진짜로 마지막 속도 저하를 필요로 할 때 structs and marshall를 사용할 수 있습니다. 파일을 다른 플랫폼으로 옮기고 싶다면 위험합니다.

을 잊어 버린 경우 : protobuf.net을 잊어 버렸습니다. 데이터를 디스크에 쓰고 읽는 것이 가장 좋습니다. 바이너리이며, 빠르고 사용하기 쉽습니다.

감사 거트-월

+0

:( – oguzh4n

+0

은 어쩌면 당신은 코드 어디를 게시 할 경우 최적화 할 수있는 몇 가지 물건은 여전히 ​​거기에 이미 SSD 디스크를 사용하고 내가 BinaryWriter를 사용하지 수 있도록 내가 처리 후 읽을 수있는 CSV 파일이 필요합니다 패스를 통해 데이터를 텍스트로 변환 할 수 있습니다. 우리가 볼 수있는 것이 있다면 왜 읽을 수있는 CSV가 필요합니까? 퍼포먼스에 문제가 있다면 그것을 읽을 수 없을 것입니다. 다른 시스템에 넣어야 할 필요가 있다면 – gjvdkamp

+0

@ oguzh4n _ "이미 SSD 디스크를 사용하고 있습니다"_ 다중 스레드는 성능을 저하시키지 않지만 여전히 도움이되지 않습니다. 많은 I/O 스레드를 사용하십시오. (독립) 디스크. –

관련 문제