EWS Managed APIを使用して、指定された間隔の後に新しいメールメッセージをMS Exchangeにポーリングします。ポーリングコール(PullSubscription.GetEvents()
)が呼び出されるたびに、Microsoft APIはNetworkStream
を適切に処理できず、メモリがそれに比例して増加します。以前はdiscussed hereでしたが、決して解決されませんでした。 ANTS Profilerを使用して、どのオブジェクトがメモリ内で連続的に成長しているのかを特定し、問題を特定できました。参照できないオブジェクトのガベージコレクションを強制するには?
ここで問題が切り分けられました。私たちが参照していない外部APIで作成されたNetworkStreamを処分する方法はありますか? GC.Collect()はまだアクティブな参照があるので、GC.Collect()はそれを破棄していないようです。ダングリングリファレンスをクリーンアップするにはどうすればよいですか?バグのあるSDKを強制的にクリーンアップするために使用できるラッパーがありますか?
私は疑問に思っています - 反射を介して参照を保持できますか? –
孤立したNetworkStreamがライブラリ内にある場所を投稿してください。私はちょうどGetEventsMethodの周りを突き刺しましたが、NetworkStreamは見つかりませんでした。 –
@HenningKrause私はDaren Thomasのアプローチを試しましたが、スキップするために選択したExchangeServiceおよびSubscriptionBaseクラスの内部について深い調査が必要になります。現在私はサルバトーレの#1を今のところ追ってきて、MSと一緒にチケットを開いた。私たちは次に何が起こるかを見ていきます... – SliverNinja