2017-12-08 18 views
0

アプリケーションのメモリプロファイリング中に(サービスファブリックの上にホストされている.NET owinサービス)、EventHandler<UnobservedTaskExceptionEventArgs>には24個のインスタンスがあり、サイズは1880Bですが、すべての参考資料は約1.2GBです。EventHandlerのメモリ使用量<UnobservedTaskExceptionEventArgs>

私はこれを受け取ります。これは、una​​waitedタスクの例外と何らかの形で関連しています。 これは腐ったものなのか、赤ちゃんの赤ちゃんなのでしょうか?なぜ、それが最初にメモリダンプに入ったのですか?

+0

私は不可能ではないと思います。例外のReadOnlyCollectionを持つAggregateExceptionをラップします。 jiggabyteの価値のある例外は、よく、デバッグ可能でなければならないものです。 –

+0

@HansPassantはい[1.21 _jiggabytes_](https://tenor.com/view/1point21gigawatts-back-to-the-future-doc-gif-9470027)は確実にデバッグ可能でなければなりません:) – JSteward

答えて

1

これは、サービスファブリックインフラストラクチャの一部です。ステートフルサービスレプリカは、内部監視のためにTask.UnobservedTaskExceptionにフックします。それはまた優雅にそれ自身を登録解除する。割り当てられたメモリは、レプリカに関連付けられた状態辞書のために、この大きなものです。

+0

私たちもこれを見ています。あなたはこれをより合理的な何かにもたらす方法を見つけることに終わったのですか?それともあなたの答えは実際にはあなたのサービスの状態の大きさに期待していることですか? –

+0

@NickDarvey - 私の答えは基本的に、メモリリーク解析の目的でTask.UnobservedTaskExceptionを無視できることを意味します。ステートフルなレプリカディクショナリへの参照があります。私の本物の問題は信頼できる辞書でした。ここで確認することができます:https://stackoverflow.com/questions/47776645/removing-items-from-reliable-dictionary-doesnt-actually-remove-them-from-memory –