ezipを使ってみる
対象 | Win系プログラマ |
公開/改記日 | 2000/08/04 |
ezipというのは実行ファイルを通すとファイルサイズが小さくなるツールで、しかもそのファイルをそのまま実行することができます。サポートページによるとEXEファイル対象ということですが、DLLファイルも構造はほぼ同じなので使えるようです。とりあえず、拙作のソフトで試してみました。C++Builder5でコンパイルされたWord Bank 1.2.0b2+(公開版より後バージョンなので"+"付き)が対象です。
以下、元のファイルをwb0.exeとして、1回ezipを通したものをwb1.exeと書きます。まず、ダウンロードしてきたezipのファイルを解凍しようと思ったら、なんとそれは圧縮ファイルではなく実行ファイルそのものでした。この実行ファイル自身もそれで小さくされているからなのでしょうか。
コマンドラインツールなのがちょっと面倒ですが、早速wb0.exeをezipで圧縮してwb1.exeにしてみます。大体2/3の大きさになったようです。問題なく実行できるか試してみます。とりあえず起動→テスト用の用語集(用語数約450)を変換してみても、wb0.exeの時と速度も変わらず、問題もなさそうでした。問題はlh7で圧縮した時に小さくなるかということです。多分ezipは実行ファイル内で4バイト使って数値とかを入れてるのを適当に削ったりしてるんだろう(注:勝手な予想)からそれをLZHの方式で圧縮したら結局あまり変わらないような気がしたので、圧縮してみたのですが、予想外の結果が出ました。同じくらいになるどころか、wb1.exeの方はlh7で圧縮してもあまり小さくならないという結果です。
ezip回数 | 大きさ(bytes) | lh7で圧縮後のサイズ(bytes) |
未使用(元のコード) | 274,432 | 93,325 |
1 | 177,494 | 117,712 |
まぁ、大きくなっても不思議ではないな、と思いつつ、wb1.exeをもう1度ezipに通したらどうなるか気になったので試してみました。ご存知の方は多いと思いますが、LZH圧縮の場合は2回以上かけてもほとんど無意味です。なので、ezipでもおそらくそうだと予想していたのですが、結果は次のとおり。(さらに、3回目、4回目も試しました)
ezip回数 | 大きさ(bytes) | lh7で圧縮後のサイズ(bytes) |
未使用(元のコード) | 274,432 | 93,325 |
1 | 177,494 | 117,712 |
2 | 128,477 | 46,637 |
3 | 128,463 | 46,654 |
4 | 129,006 | 46,656 |
さすがに3回目以降はほとんど意味が無いですが、注目するのは2回目です。ファイルの大きさだけでなく、lh7圧縮後のサイズも劇的に小さくなっています。しかし、これはますます実行ファイルの中身が心配です。試しに起動してみようとしたのですが、起動してくれません。しかも、タスクマネージャで調べてみると、wb2.exeが100M近くもメモリを消費しているようです。結局どれだけ待っても最初のウィンドウ表示すらできませんでした。つまり、「ezipは繰り返して使えない」という結果になりました。
ezip回数 | 大きさ(bytes) | lh7で圧縮後のサイズ(bytes) | 正しく実行できるか | メモリ使用量(KB) |
未使用(元のコード) | 274,432 | 93,325 | 実行可 | 5,392 |
1 | 177,494 | 117,712 | 実行可 | 5,616 |
2 | 128,477 | 46,637 | 起動不可 | - |
3 | 128,463 | 46,654 | 起動不可 | - |
4 | 129,006 | 46,656 | 起動不可 | - |
メモリ消費量は起動直後に安定したところでタスクマネージャで測ったのですが、wb1.exeはわずかにメモリ使用量が増えているようです。
結局、ezipは使うとすればユーザ側がダウンロード後に適用する、というのがいいようです。個人的には使わない方がいいという印象でした。
みにこんてんつ一覧に戻る