2012-08-08 12 views
2

나는 많은 이미지를 처리 ​​한 후 디스크에 많은 이미지를 저장하는 C#의 프로그램을 가지고있다. . 이렇게 많은 이미지를 저장해야하기 때문에 시간이 꽤 걸릴 것 같습니다.여러 이미지를 C#으로 빠르게 디스크에 저장

이제 궁금합니다. C#에서 이미지 저장 속도를 높이는 방법이 있습니까? 현재 표준 bmp.Save(filename) 접근 방식을 사용하고 있습니다.

도움이된다면 이미지 생성 프로세스의 일부로는 잠금 비트를 사용하여 픽셀 값에 더 빠르게 액세스하고 수정하는 작업이 포함되므로 이렇게하면 동시에 이미지가 디스크에 저장 될 수 있습니다. 죄송합니다.이 아이디어가 불투명 한데도 C#을 여전히 조금 익숙하게 여깁니다.

+4

현재 저장 속도가 무엇인지 알아 냈습니까? 하드 드라이브의 평균 쓰기 속도 사양에 가깝습니까? 그것이 그렇다면, 당신은 이것에 대해 생각하는 것을 멈출 수 있습니다. –

+1

ImageSave는 효율적이고 빠르거나 빠를 지 모르지만 1 가지를 알고 있으며 그게 모두 하드 디스크 속도에 달려 있다는 것입니다. – EaterOfCode

+1

비디오 인코더는 비트 맵을 높은 속도로 디스크에 저장하는 것이 좋습니다. 그 너머에 조언을 해줄 분명한 방법은 없습니다. –

답변

3

확실히 각 이미지 저장을 위해 새 스레드를 시작할 수 있습니다. 그것은 약간의 시간이 걸릴 것입니다, 디스크는 병 목이 될 것입니다.

다른 옵션은 이미지를 임시 버퍼 목록에 저장 한 다음 프로그램에 제어권을 반환하는 것입니다. 그런 다음 각 디스크를 배경으로 디스크에 쓰는 스레드가 있어야합니다. 물론, 그것은 단지 이런 일이 일어나는 것을 신속하게 나타낼 것입니다. 그것은 아마도 귀하의 요구를 충족시킬 수 있습니다.

.NET이 일종의 비동기 I/O를 구현했다고 확신합니다. 나는 그것이 Windows에 있다는 것을 알고 있으므로 .NET에있을 것입니다.

도움이 될 수 있습니다.

http://msdn.microsoft.com/en-us/library/kztecsys(v=vs.71).aspx

+2

여러 개의 쓰기 스레드로 인해 디스크가 헤드 - 쓰루 스 래싱을 시작하면 게임이 종료됩니다. –

+1

@RobertHarvey 사실,하지만 다른 옵션을 모르겠습니다. 그걸 제외하고 ... 나는 한가지 더 많은 수맥으로 업데이트하려고하고있다. 대부분의 O.S.는 쓰기를 동기식으로 유지하지만 쓰기 캐시에 모두 대기 상태가되면 더 빠릅니다. 그런 다음 하드 드라이브가 허용하는 한 빨리 디스크에 쓸 수 있지만 프로그램의 오버 헤드가 각 이미지를 반복하고 동기식으로 저장하는 것을 걱정할 필요가 없습니다. –

+0

위대해, 고마워. 나는 지금 이것을 살펴볼 것이다. 스레드에 대한 작업은 제가 학습에 관심이 있었던 부분 이었으므로, 지금 당장이 작업을 수행 할 수있는 기회로 생각하겠습니다 :) 건배! – plone

관련 문제