私たちのアプリケーションには多くの .NET アセンブリがあり、これまで NGen スクリプトを使用してデプロイされていなかったため、実行時に常に JIT されます。
私たちのアプリケーションは通常、ターミナル サーバーに展開されるため、Windows でコードのバイナリ イメージを共有することがおそらく現在の方法よりも最適であるため、ベース アドレスの設定とアセンブリの NGen 化を検討しています。
そこで、NGen をまったく使用せずにプログラムを実行し、[SysInternals の listdlls][1] を使用してそれぞれのサイズを見つけ、それを次のクラスのサイズ (つまり、xxxx --> 10000) に増やしました。次に、すべてのアセンブリのメモリ リストをレイアウトし、それらすべてのベース アドレスを調整しました。
これまでのところlistdlls
、実行時にアセンブリがリベースされていないことがわかりました。
しかし、2 つのインスタンス間で実際に共有されているメモリの量を測定するにはどうすればよいでしょうか? 基本的に、アセンブリで NGEN を実行せずにプログラムの 2 つのインスタンスを開始し、NGEN を実行した後にもう一度実行するとします。
実際の効果を見つけるには、どのような数値をどのツールから見ればよいでしょうか?
たとえば、アセンブリをリベースする行為自体が、使用しているサード パーティのアセンブリ (たとえば、DevExpress コンポーネント) を移動させて、突然リベースしなければならなくなり、すべてがウォッシュになるという事実を認識しています。
では、どこからどの数字を読むのでしょうか? 同様に、タスク マネージャーのワーキング セットを使用しますか? プライベートメモリー?コミットサイズ?前後にメモリを解放しますか?
何かアドバイス?