今月・来月は、.NET アプリケーションの高速化について色々調査したいと思います。コードの最適化、NGEN等といった一般的な高速化手法があります。今回はネットで調べ物していた時に見つけたものを少し紹介したいと思います。RPX ( Rugland Packer for ( .Net ) eXecutables ) という .NET アプリケーション・アセンブリの圧縮ツールです。ここからダウンロード可能です。
Rugland Packer for (.Net) eXecutables 1.3
Compress .NET executables and pack multiple assemblies into a single executable bundle. It requires no additional external assembly or library to decompress so you get really good compression with only about a 7KB overhead. It's developed in C#
Compress .Net Executables.
- Compress your .Net assembly for faster download.
- High ZIP compression with no unpack library overhead.
- Bundle multiple assemblies into a single distribution.
- Works for Windows Forms and Console Applications.
- Create a toolkit application that is a composite of multiple assemblies accessible via a menu.
- Persist or explicitly define your assembly info from the original assembly or from a source file.
- Persist or add a new icon to your packed executable.
シェアウェアなどに向いていそうですね。昔、Delphi とか参照している 複数の dll などをまとめて exe にできましたね。それに似ている思いました。シェアウェアといえば Delphi でしたねー。昔話はさておき、ドキュメントを参照しましょう。
単純に EXE を圧縮したり、
This demo creates compressed assembly from a single windows forms executable.
EXE とアセンブリを一つの EXE に統合したり、
This demo creates compressed assembly from a single console executable and a single supporting .dll assembly.
できるようです。
実際に Rpx.exe の動作を試してみましょう。ソースコードはここからダウンロードできます。Stable 4.0 フォルダ配下のソリューションファイルを Visual Studio で開いてください。参照設定等を修正する必要があります。Ionic.Zip.Reduced、Rug.Cmd を NuGet で再取得してください。修正後、ソリューションをフルビルドします。
Stable 4.0 / Demos フォルダ配下の Test.bat or Test.ps ファイルを実行します。正常に実行されると下記のようになります。Rpx コマンドで圧縮された、exe が起動されます。※下記はbatを実行しました。
うーん。何故か最終のファイルサイズが大きくなってしまっています。本当は小さくなるのでしょう。次はアセンブリと結合してみます。
うまくいきました。きちんと exe と アセンブリが結合されて一つの exe が生成されました。次は、AssemblyInfo.cs と exe を結合して ToolDemo.exe が生成されました。
この手のツールは他にも色々ありそうですね。この手のツールは、万能なツールが中々なさそうな感じがします。