私は最近、大量のスループット (1 日あたり 6,000 万以上のリクエスト) を処理する小さなサービスを作成しましたが、メモリの問題が発生しています。最初に、非常に有用な非常にパフォーマンス指向の ServiceStack ライブラリに関係するものではなく、私が書いたものでなければならないと確信していた通常の容疑者をすべて調べました。しかし、運用サーバーで !dumpheap -stat に windbg を使用すると、驚いたことに、メモリ内のオブジェクトの大部分が System.WeakReference 型であり、!gcroots が ServiceStack の Funq コンテナーを指していることがわかりました。
私は自分のサービスで IoC 化されたデータ構造を使用していないので、なぜこれが起こっているのか疑問に思っていました。何かを間違って初期化していますか? 私の apphost 初期化クラスは、アセンブリと名前の情報を使用して基本コンストラクターを呼び出すだけで、Configure メソッドをまったくオーバーライドしません。
public SvcName() : base("SvcName", typeof(SvcName).Assembly) { }
Visual Studio が「エディット コンティニュ」デバッグ オプションをオンにしてバイナリをコンパイルしているため、まれに System.WeakReference オブジェクトが .NET によって挿入されることがよくあることを他の場所で読みましたが、私の VS でそれをオフにしても効果はありません (おそらくSS バイナリは既にコンパイルされており、私のプロジェクトで参照されているだけです)。
他の誰かがこの問題を抱えたことがありますか?