ターミナルサービス環境で.NET 2.0 WinFormsアプリケーションを実行すると、予期しない結果が発生することがあります。私が読んだことはすべて、JITのアセンブリ(ネイティブイメージを作成するためにNGenを使用しない)がプライベートページに格納されるすべてのコードスペースをもたらし、ワーキングセットのサイズ/メモリの負荷を増加させることを示しています。しかし、実際の結果(プロセスエクスプローラ、VMMap、WinDbgを使って検証)は、JITのアセンブリでさえ実際に共有可能なページに置かれていることを示しています(アプリの複数のインスタンスが実行中の場合、セッション/ユーザー)。共有可能なページ内の.NET JITによるアセンブリ
誰でもこの理由を説明できますか?これはW2K8サーバ環境で実行されているため、ASLRは各アセンブリの特定のベースアドレスが不足している理由を説明します。&結果のリベースは問題を引き起こしません。それでも、これらがネイティブPEイメージではないという事実は、それらのアセンブリがプライベートページに格納されるコードになるはずです。
これは、私たちがNGenを使用してメモリの負荷を減らすために調査を開始したときに発見されましたが、実際にはJITのアセンブリが既に共有されていたため、作業セットのサイズが増えました。
私が見つけた最新の参照が再び私たちの実際の結果と異なっており、ここにある:
編集:私は、最初に質問を投稿以来、Windows上でより多くの実験をそのを追加する必要がありますServer 2003のテストボックスは、プロセス間で共有可能なJITのアセンブリを明らかに示しています。私は、私が見つけることができるすべてのアドバイスがNGenが必要であることを示しているのはなぜか分かりませんが、現実の証拠はすべてそれに反するものです。私は本当にここの専門家が光を放つことができると期待しています。
ありがとうございます!
編集:私はすべての.NET/CLRブックを削除してしまいました。この問題を解決するために検索クエリのアイデアがなくなりました。 "私は何が起こっているのか分からない"という恐ろしい気持ちをなくすのを手伝って、私の一日をつくってくれるだろう! :)
NGenが実際にメモリ使用に役立つという確かな証拠(および私たちの環境での起動時間の影響はごくわずかです)を除いて、私たちはアセンブリのネイティブイメージを生成することを追及しないことに決めました。私はまだこの予期しない動作を見ている理由を知りたいです! – allgeek