Citrix/Terminal Server で C# ファット アプリケーションを実行しています。
セッションごとの実際のメモリ使用量を測定する方法は? 全体のメモリ使用量を減らすにはどうすればよいですか?
私たちはまだ .NET 1.1 に取り組んでいます。.NET ランタイムをアップグレードすると違いはありますか?
.NET で実際のメモリ使用量に関するメトリックを取得することは非常に困難です。Marshal.SizeOf() を呼び出すことによって取得できる最も近い近似値は、オブジェクトごとに異なります。その方法についての私の理解では、それは本質的にオブジェクトのシリアル化されたバージョンのサイズを測定しており、メモリ内のフットプリントはそれに近いかもしれませんが、正確ではありません。しかし、それは良い見積もりです。
.NET の下の SMS API を調査することもできます。これらは、プロセス (または他のプロセス) について、オペレーティング システムからさまざまなメモリ統計を照会する方法を提供します。「perfmon」で使用されるライブラリと同じです。それを使用して、プロセスをプログラムで検査できる場合があります。
また、.NET 用の優れたプロファイリング ツールに投資することもできます。ANTS と dotTrace を評価しました。どちらもとても良いです。私はその単純さのために dotTrace を好みました。ほとんどのプロファイラーには、非常に直感的でないインターフェイスがあります。それは私が期待するようになったものです。これらの基準では、dotTrace は実際には非常に優れています。ANTS はおそらくより高度だと思います(確かではありませんが、両方で行った簡単な評価からの私の意見です)。
アプリケーション パフォーマンスの測定に関する MSDNの記事を次に示します。これには、メモリ使用量の測定が含まれます。
.NET ランタイムをアップグレードしても、そのままではアプリケーションに重大な影響があるとは思いません。おそらく、他の方法でアプリケーションを最適化する方がよいでしょう。リソースが不要になったら、廃棄するようにしてください。