2012-04-20 3 views
1

1KB에서 200MB 크기의 파일을 읽고 구문 분석 할 응용 프로그램을 작성 중입니다. 내가 두 번 구문 분석해야가장 빠른 이진 파일 읽기 및 쓰기

...

  1. 파일에 포함 된 이미지의 압축을 풉니 다.

  2. 이미지 분석 이미지의 내용을 추출합니다.

일반적으로 파일 스트림, 버퍼링 된 스트림, 바이너리 리더 및 바이너리 기록기를 사용하여 내용을 읽고 씁니다.

지금, 나는이 파일을 읽고 내용을 추출하는 가장 빠르고 가장 효율적인 방법을 알고 싶어 ...

좋은 방법이나 좋은 클래스 라이브러리가 있습니까?

참고 : 안전하지 않은 코드는 정상입니다!

+0

여기서 가장 큰 성능 향상은 파일 하나를 구문 분석하여 얻을 수 있습니다. 이렇게하면 이미지를 두 번 스캔하지 않아도됩니다. –

+0

@ 루크 사실 이미지는 청크에 포함되어 있으며 이미지의 일부 바이트는 구문 분석 전에 [기록]해야합니다. – Writwick

+0

예, .NET 파일 개체를 사용하는 측면에서 파일을 읽는 원시 속도면에서 성능 차이가 있어서는 안됩니다. 이것을 최적화 할만한 이유가 있습니까? –

답변

9

파일을 판독하는 빠르고 간단한 방법은 간단하다 : 메모리에 바이트 배열로 전체 파일을 읽어

var file = File.ReadAllBytes(fileName); 

. 그런 다음 메모리 어레이 액세스 속도에서 필요한 것을 찾게됩니다 (즉, 매우 빠름). 이렇게하면 파일을 읽는 동안 파일을 처리하는 것보다 더 빠를 것입니다.

그러나이 파일이 메모리에 잘 맞지 않을 경우 (그리고 81   메가 바이트가됩니다),이 작업은 청크로 수행해야합니다. 이것이 필요하지 않다면 우리는 그 까다로운 토론을 안전하게 피할 수 있습니다. .NET 4.0을 사용

  1. 경우 (What are the advantages of memory-mapped files? 더) memory mapped files을 사용 하나이 경우 해결책은 될 것입니다.

  2. 그렇지 않은 경우 읽기, 캐쉬 및 메모리 (효율성 향상)를 위해 필요하다고 생각하는 내용을 유지하거나 메모리에 계속 보관할 필요가 없습니다. 이것은 지저분 해지고 느려질 수 있습니다.

+1

사실 Raw 파일에는 HEADER와 ACHUNK가 포함되어 있으며 BCHUNK는 [ACHUNK와 BCHUNK는 두 가지 유형의 블록입니다.] 이미지는 BCHUNKs에 포함되어 있으므로 그 덩어리를 읽어야합니다. 메모리 매핑 된 파일 [내가 가진 아이디어 이 라이브러리를 코딩하기 전에 사용하기 위해]하지만 나는 그것의 신뢰성에 대해 확신하지 못합니다. 하지만 지금은 성능을 향상시키기 위해 그것을 사용해야 할 수도 있습니다. 대답으로 표시하지는 않지만 실제로 도움이되었습니다. – Writwick

+0

글쎄, 당신은 투표 할 수 있어요. 상관없이, 귀하의 질문에 대해 아무것도 메모리 맵 파일을 비명. 'ReadAllBytes'는 여러분이 필요로하는 모든 것을 할 것이며, 빠르고 간단합니다. 어쨌든. – yamen

+0

내가 15 이하의 평판을 가지고 있기 때문에 나는 투표를 할 수 없다. 배열 함수는 FileStream 함수보다 느리기 때문에'ReadAllBytes'를 사용하면 안됩니다. – Writwick