을 사용하여 상당히 큰 ZIP
파일을 만들 때 발생하는 OutOfMemoryException
을 디버깅하려고합니다.OutOfMemoryException System.IO.Packaging을 사용하여 큰 ZIP 파일을 만들 때
코드는 많은 개체 목록을 반복하면서 각 개체에 대해 다음을 수행합니다.
- 임시 파일에 개체 데이터를 직렬화합니다.
- 파일에 대해
PackagePart
을 만듭니다. 다른 소스System.IO.Stream
에서 - 복사 :
- 소스 스트림 :
FileStream
- 대상 스트림 :
- 소스 스트림 :
PackagePart::GetStream()
=>MS.Internal.IO.Zip.ZipIOModeEnforcingStream
는 마지막으로 파일을 저장 Package::Close()
를 호출합니다.
내가 가지고있는 문제는 특별히 큰 개체 목록의 경우 OutOfMemoryException
(x86 프로세스 크기가 약 1.2GB로 늘어남)입니다.
개체 데이터를 여러 조각으로 분할하여 루프 당 더 적은 양 (예 : 위의 1-3 단계) 만 처리하려고합니다. 아이디어는 n
ZIP 파일을 임시 디렉토리에 만들고 단일 아카이브로 결합하는 방법을 찾는다는 것입니다.
System.IO.Packaging
을 사용하면 가능합니까? 부품을 결합하려면 무엇을 사용해야합니까?
또는이 문제를 해결하는 더 좋은 방법이 있습니까?
새 패키지 – Ankur
@Ankur를 만들 때 반복 사이에 플러시 (Flush)를 호출하여 시도해보십시오. 의견을 답변으로 업그레이드하면 기꺼이 받아 들일 것입니다. – LeopardSkinPillBoxHat