2012-02-09 9 views
5

私はUPXコンプレッサを使ってDelphi XEで書かれたアプリケーションを圧縮しています。ファイルサイズは約32Mbから8Mbになります。UPXでアプリケーションを圧縮した後にアプリケーションがメモリを使用するのはなぜですか?何ができるのですか?

私が気づいたのは、圧縮ファイルを実行するとRAMの占有量が大幅に増えていることです。 25/30 Mbから約80 Mbになります。これは正常なのですか、それともあなたが保つべき問題ですか?私の場合、アプリケーションは複数のユーザーがいるWindows Server 2008のリモートデスクトップモードで動作するため、システムの負荷が不均衡になります。

どうしてですか?どうすればこの問題を解決できますか?

+1

一度に何人のユーザーがアプリを実行しますか?コンプレッサーを使用する場合、プロセスの各インスタンスは個別の物理メモリーを消費します。ページは共有できません。 UPXを使用する動機は何ですか? –

+0

私は特にUPXについては知らないけど、少なくともいくつかのPEコンプレッサーは起動時に画像全体をメモリに展開します。これは、個々のセクションが必要に応じてページングされる通常のPEとは異なります。 –

+0

デバッグ情報が実行ファイルにリンクされていませんか?これは通常、圧縮するよりもファイルサイズに大きな差をもたらします。私のアプリケーションの1つは、デバッグ情報を持つ17MBで、それがないと3つ未満です。 –

答えて

20

これは、EXEコンプレッサーのしくみです。彼らはディスクファイルを圧縮し、実行可能コードを圧縮しません。圧縮ファイルを再度実行可能にするには、圧縮解除する必要があり、非圧縮データはメモリに保存されます。通常の圧縮されていないEXEファイルでは、OSはファイルのうち現在必要な部分だけを読み込みます。残りはディスクに残ります。圧縮されていないアプリケーション全体がメモリに格納されているため、メモリ使用量が高くなっています。

さらに、ディスクファイルは複数のユーザーで共有できますが、圧縮されていない実行可能ファイルを含むメモリは共有されません。プログラムを実行している各ユーザーには、圧縮されていないプログラムの個別のコピーがあります。

プログラムを圧縮して保存している26 MBのディスク容量は、実際にはであり、共有リモートデスクトップサーバーのはありません。ファイルの圧縮を気にしないでください。配布中に帯域幅を節約するためにファイルを圧縮する場合は、EXEコンプレッサではなく、インストール時に一度圧縮解除するインストーラでプログラムをパッケージ化します。

+1

+1メモリへの解凍に関する技術的な説明と、プログラムを圧縮しないように助言する。 Enzoに:Delphiの実行可能ファイルよりUPX **を使用しない方がよいでしょう。アンチウィルスのために多くの誤検出警告が発生する可能性があります - UPXはDelphiデスクトップアプリケーションの価値がありません(http://stackoverflow.com/questions/8937492/what-is-upxs-best-compression-method/ 8938525#8938525)。 –

+0

ありがとう、Rob Kennedy、あなたは徹底してきました! –

+1

@EnzoCostantiniあなたは彼の答えを受け入れることができます。 ;) – EMBarbosa

関連する問題