2012-02-09 6 views
5

저는 델파이 XE로 작성된 어플리케이션을 압축하기 위해 UPX 압축기를 사용하고 있습니다. 파일 크기는 약 32Mb에서 8Mb로 늘어납니다.UPX로 압축 한 후 응용 프로그램에서 메모리를 더 많이 사용하는 이유는 무엇입니까?

내가 알아챈 이상한 점은 압축 파일을 실행할 때 RAM 점유가 현저히 증가한다는 것입니다. 25/30 Mb에서 약 80 Mb로 이동합니다. 이것은 정상적인가요 아니면 계속 보관해야하는 문제입니까? 필자의 경우 응용 프로그램이 여러 사용자가있는 Windows Server 2008 원격 데스크톱 모드에서 실행되기 때문에 시스템의 규모가 과도하게 커집니다.

왜 이런 일이 발생합니까? 이 문제를 어떻게 해결할 수 있습니까?

+1

한 번에 얼마나 많은 사용자가 앱을 실행합니까? 컴프레서를 사용하는 경우 프로세스의 각 인스턴스가 별도의 실제 메모리를 사용합니다. 페이지를 공유 할 수 없습니다. UPX 사용에 대한 귀하의 동기는 무엇입니까? –

+0

UPX에 관해서는 잘 모르겠지만 적어도 일부 PE 압축기는 시동시 전체 이미지를 메모리로 압축 해제합니다. 이는 개별 섹션이 필요에 따라 호출되는 일반 PE와는 다릅니다. –

+0

디버그 정보가 실행 파일에 링크되어 있지 않습니까? 일반적으로 파일 크기는 압축하는 것보다 훨씬 더 큰 차이가 있습니다. 내 응용 프로그램 중 하나는 디버그 정보가있는 17MB이며이 정보가 없으면 3 미만입니다. –

답변

20

그래서 EXE 압축기가 작동합니다. 그들은 디스크 파일을 압축하고 실행 코드을 압축하지 않습니다. 압축 된 파일을 다시 실행 가능하게하려면 압축 해제해야하며 압축되지 않은 데이터는 메모리에 저장됩니다. 보통의 압축되지 않은 EXE 파일을 사용하면 OS는 현재 필요한 파일 부분 만로드합니다. 나머지는 디스크에 남아있을 수 있습니다. 압축되지 않은 전체 응용 프로그램이 메모리에 있기 때문에 메모리 사용량이 더 많이 나타나는 이유입니다.

또한 디스크 파일은 여러 사용자가 공유 할 수 있지만 압축되지 않은 실행 파일이 포함 된 메모리는 공유되지 않습니다. 프로그램을 실행하는 각 사용자에게는 압축되지 않은 프로그램의 별도 사본이 있습니다.

프로그램을 압축하여 저장하는 26MB의 디스크 공간은 실제적으로 이 아니며 공유 원격 데스크톱 서버에서는입니다. 파일 압축에 신경 쓰지 마라. 배포하는 동안 대역폭을 절약하기 위해 파일을 압축하려면 설치 프로그램에서 압축을 풀 때마다 EXE 압축 프로그램 대신 설치 파일을 한 번 압축 해제하는 설치 프로그램에서 프로그램을 패키지화하십시오.

+1

+1 메모리 압축 해제에 대한 기술적 설명과 프로그램 압축 금지에 대한 조언. Enzo : Delphi 실행 파일보다 UPX **를 사용하지 않는 것이 좋습니다. 바이러스 백신으로 인해 많은 양성 반응 경고가 발생할 수 있습니다. - 따라서 UPX는 Delphi 데스크톱 응용 프로그램에 가치가 없습니다. (http://stackoverflow.com/questions/8937492/what-is-upxs-best-compression-method/ 8938525 # 8938525). –

+0

고마워요, 롭 케네디, 당신은 철저했습니다! –

+1

@ EnzoCostantini 당신은 그의 대답을 받아 들일 수 있습니다. ;) – EMBarbosa