2011-10-21 14 views
1

プルサブスクリプション(ExchangeService.SubscribeToPullNotifications())でメモリリークの問題が発見されたのは、Exchange Managed Web Services APIですか? PullSubscription.GetEvents()を呼び出すと、ほぼすべてのポーリングコールでメモリの使用率が4Kに上昇します。私がメモリ使用量を抑えることができた唯一の方法は、すべての呼び出しの後でガベージコレクションを(GC.Collect()経由で)強制することです。これは不要なパスです。EWSマネージAPI 1.1 - プルサブスクリプションメモリリーク

APIがほぼ1年間は変更されていないことに驚いています。

+0

GC.Collect()を実行し続ける - Exchange API呼び出しがガベージコレクタによって使用された時間をマスクするので、OKです。しかし、コードに漏れがある可能性は非常に高いです。 – mozillanerd

+0

私は、単一のサブスクリプションを作成し、5秒後に 'while(true)'でポーリングする単純なコンソールアプリケーションを作成することで、コードリークを排除しました。ただし、メモリが上昇し続ける(特に複数のサブスクリプションがある場合)。 – SliverNinja

答えて

1

この問題はanother postによって解決されました。基本的に、EWSはNetworkStreamSqlExceptionのため)をリリースできなかった別のコンポーネントと競合していました。 ANTS memory profilerを使用して、問題の原因とタイミングを特定しました。このプロファイリングツールがなければ、問題を発見したことはありませんでした。

0

GC.Collectがメモリを再利用すると、メモリリークは発生しません。十分なメモリが利用可能であるため、GC収集を実行するというGCへのプレッシャーはありません。

関連する問題