2016-09-27 6 views
0

이미지 파일을 pdf로 변환 할 때 내 메모리 사용량이 4GB 이상이고 CPU 사용량이 100 % 인 것처럼 Magick.NET 라이브러리에 어려움을 겪고 있습니다. 변환이 완료되면 모두 정상으로 되돌아갑니다. 하지만이 특정 제 3자를 한 응용 프로그램의 많은 인스턴스에서 사용하면 엄청난 메모리 손실이 발생합니다.Magick.NET C# - 대용량 메모리 사용량

문제가 존재합니다. images.Write (newPdfPath);

using (MagickImageCollection images = new MagickImageCollection()) 
     { 
      images.Read(orginalImage); 

      images.Write(newPdfPath); 
     } 

이미지는 다른 크기, 그리고 얼마나 큰 정말 크기 KB 문제도 존재 7의 JPG로 변환하는 경우와 같이 중요하지 않습니다.

도와주세요 !!!!

+1

이미지의 크기는 얼마나됩니까? 어쩌면 [this] (http://stackoverflow.com/questions/34737302/memory-consumption-in-magick-net)에서 설명을 줄 수 있습니다. –

+0

우리는 어떻게 작은 정보를 어떻게 도울 수 있습니까 ?? – TaW

+0

이미지를 처리하는 코드를 게시하십시오. – raven

답변

1

cpu 및 메모리 할당은 하드 드라이브의 이미지 크기와 관련이 없습니다. 완성 된 픽셀 수와 관련이 있습니다. 20,000 픽셀 x 20,000 픽셀의 완전 흰색 이미지가있는 경우 하드 드라이브에있는이 파일의 크기는 6MG가 될 수 있지만 Magick.net을 사용하여 메모리에로드하면 기가 바이트가됩니다. 먼저 이미지의 크기 (픽셀 단위)를 확인한 다음 성능을 판단 할 수 있어야합니다. 다음 방법을 사용하여 성능을 향상시킬 수 있습니다.

이미지를 메모리에로드하면 .mpc 형식의 HDD에 이미지를로드 한 다음 메모리에 매우 빠르게로드 할 수 있습니다. 병렬 루프에서 명령을 실행할 수 있는지 대신 Q16

사용 Magikc.net의 Q8 (당신이 시간의 몇 가지 이미지를로드 할 필요가있는 경우) 다음 Magick.net 버전 7은 빠른 거의 4 배를 실행할 수 있습니다 .

그리고 다른 답변은 완료되었을 때 이미지를 처분해야한다는 것입니다.

0

루프에서 이미지를 변환 한 다음 변환 후 각 이미지를 삭제하면 도움이 될 수 있습니다. 이미지에서 사용하는 관리되지 않는 메모리 리소스를 확보하려면

Image.Dispose(); 

메서드를 사용하십시오.

+0

'이미지'는 폐기 할 필요가 없습니다. 'images' 변수는'using' 문장에서 선언됩니다.이 문장은'using' 문장의 끝에서'Dispose'를 호출합니다. –

+0

Will은 Dispose()를 호출하지만, 그 순간에 폐기 될 것이라는 의미는 아닙니다. – BrightShadow