2010-04-02 7 views
2

약 600 개의 작은 이미지를 메모리에로드하려고합니다. 각 이미지 파일의 크기는 2 KB (20 x 30)보다 적습니다. 따라서 모든 이미지는 크기, 형식 등에 대한 추가 정보가 있어도 최대 5MB의 메모리가 필요합니다. 400 번째 이미지 이후 Image.FromFile()은 OutOfMemory 예외를 throw합니다.OutOfMemory 작은 이미지를 여러 번로드 할 때 예외가 발생합니다.

그래서 문제가 무엇입니까?

+0

오래된 이미지를 '폐기'할 수 있습니까? – SLaks

+0

로드하는 방법에 대한 코드를 보여줄 수 있습니까? –

+0

아니요, 오래된 이미지를 처리 ​​할 수 ​​없습니다. 내 목표는 이미지를 메모리에 캐시하는 것입니다. 그림을로드하는 데 사용하는 코드는 다음과 같습니다. patterns.Add (새 KeyValuePair (Path.GetFileName (file) [0], Image.FromFile (filename)))); –

답변

5

메서드를 사용할 때 OutOfMemoryException은 약간의 잘못된 이름입니다. 실제로 Outfile 메서드는 메모리 부족 상황이없는 경우에 OutOfMemoryException을 반환합니다. 즉

  • 파일
  • GDI +는 픽셀 형식을 지원하지 않는 올바른 이미지 형식이없는

문서 : 나는 당신이에 디버깅 할 경우 그것의 찾을 생각 http://msdn.microsoft.com/en-us/library/stf701f5.aspx

매번이 문제를 일으키는 매우 구체적인 파일입니다. 목록에서 해당 파일을 제거하고 문제가 해결되는지 확인하십시오. 당신이 압축 된 이미지를로드하는 경우 압축 해제 할 때 명심

+0

고마워요! 그건 내 잘못이야. thumbs.db 파일을 잊어 버렸습니다. –

0

당신이 작업을하는지 분명하지 않다, 그래서 여기 자상을거야가 ... 또한 메모리 오버 헤드가 있다는 것을 이들. 잘 알고 있듯이 2KB JPG는 BMP보다 훨씬 큽니다. 이러한 이미지로 작업하고 메모리 요구 사항에 대해 생각할 때 JPG보다는 BMP 인 것처럼 요구 사항을 생각하십시오. 그런 다음 600x2KB (2MB 미만) 대신 실제로 600x100KB (60MB)를 가지며 다른 중요한 오버 헤드 중 일부가 추가 될 수 있습니다 (가비지 수집에 따라 다르지만 개체를 ​​처리 할 때 오버 헤드는 2- 3 배는 60MB 임).

관련 문제