2012-02-09 33 views
5

Tôi đang sử dụng máy nén UPX để nén ứng dụng của tôi được viết bằng Delphi XE. Kích thước tập tin đi từ khoảng 32 Mb đến 8 Mb.Tại sao ứng dụng của tôi sử dụng nhiều bộ nhớ hơn sau khi tôi nén nó với UPX và tôi có thể làm gì với nó?

Điều lạ lùng mà tôi nhận thấy, mặc dù, việc chiếm dụng bộ nhớ RAM tăng đáng kể khi chạy tệp nén. Từ 25/30 Mb đến khoảng 80 Mb. Đây có phải là vấn đề bình thường hay là vấn đề bạn nên giữ? Trong trường hợp của tôi, vì ứng dụng chạy trên chế độ máy tính từ xa Windows Server 2008 với nhiều người dùng, nên hệ thống này không cân xứng.

Tại sao điều này lại xảy ra? Làm thế nào tôi có thể giải quyết vấn đề này?

+1

Có bao nhiêu người dùng chạy ứng dụng cùng một lúc? Mỗi trường hợp của quá trình tiêu thụ bộ nhớ vật lý riêng biệt nếu bạn sử dụng một máy nén. Không thể chia sẻ các trang. Động cơ của bạn để sử dụng UPX là gì? –

+0

Tôi không biết về UPX cụ thể, nhưng ít nhất một số máy nén PE giải nén toàn bộ hình ảnh vào bộ nhớ lúc khởi động. Điều này khác với các PE thông thường, trong đó các phần riêng lẻ được phân trang khi cần thiết. –

+0

Bạn có chắc chắn bạn không có thông tin gỡ lỗi được liên kết trong tệp thực thi không? Điều đó thường làm cho một sự khác biệt lớn hơn cho các filesize của bạn hơn là nén. Một trong các ứng dụng của tôi là 17MB với thông tin gỡ lỗi và ít hơn 3 mà không có nó. –

Trả lời

20

Đó là cách máy nén EXE hoạt động. Họ nén tệp đĩa , không phải mã thực thi . Để làm cho tệp nén thực thi lại, nó cần phải được giải nén và dữ liệu chưa nén được lưu trữ trong bộ nhớ. Với một tệp EXE bình thường, không nén, hệ điều hành sẽ chỉ tải các phần của tệp được yêu cầu tại thời điểm này. Phần còn lại có thể nằm trên đĩa. Vì toàn bộ ứng dụng không nén của bạn nằm trong bộ nhớ, đó là lý do tại sao mức sử dụng bộ nhớ của bạn xuất hiện cao hơn.

Hơn nữa, tệp đĩa có thể được nhiều người dùng chia sẻ, trong khi bộ nhớ chứa tệp thi hành chưa nén không được chia sẻ. Mỗi người dùng chạy chương trình của bạn có một bản sao riêng biệt của chương trình không nén.

26 MB dung lượng đĩa bạn đang tiết kiệm bằng cách nén chương trình của bạn thực tế là không có gì trên máy chủ từ xa được chia sẻ trên máy tính để bàn. Đừng bận tâm khi nén tệp. Nếu bạn muốn nén tệp để tiết kiệm băng thông trong khi phân phối, hãy gói chương trình của bạn trong trình cài đặt giải nén tệp một lần tại thời điểm cài đặt thay vì máy nén EXE cần giải nén tệp mỗi khi có ai đó chạy.

+1

+1 Đối với mô tả kỹ thuật về giải nén vào bộ nhớ và lời khuyên KHÔNG nén chương trình. Để Enzo: bạn nên ** không sử dụng UPX ** trên thực thi Delphi. Rất nhiều cảnh báo sai tích cực có thể xảy ra do AntiVirus - vì vậy [UPX không đáng giá đối với các ứng dụng Delphi Desktop] (http://stackoverflow.com/questions/8937492/what-is-upxs-best-compression-method/ 8938525 # 8938525). –

+0

Cảm ơn bạn, Rob Kennedy, bạn đã kỹ lưỡng! –

+1

@EnzoCostantini bạn có thể chấp nhận câu trả lời của mình sau đó. ;) – EMBarbosa

Các vấn đề liên quan