0

私はまだメモリリークハントを続けており、次のことに気づきました。

System.Threading.CancellationCallbackInfoのライブインスタンスがたくさんあります-F#のデフォルトからのオブジェクト-CancellationTokenSource(Async-Workflows)。

自分でソースを宣言し、これをMailboxProcessor内で使用して子またはタスクにまたがる場合、問題はさらに悪化します。

CancellationTokenSourceが次のような参照を保持しているため、GCはこれらのスパンされたタスク/ワークフローを収集できないようです。 ここに画像の説明を入力してください

これらのCancellationCallbackInfo-ObjectsのほとんどはGen2に到達します-MailboxProcessors内でローカル参照を使用するだけなので信じられないほどです-「ループ」ワークフロー...

これは既知の問題ですか?解決策/回避策はありますか?

今のところ、Cancellation-supportの使用をやめ、ManualResetEventsをこのコードに通します...まったく良くありません:(

4

1 に答える 1

4

を使用している場合はStartChild、そこにリークがあり(これも参照)、次のリリースで修正される予定です。を使用して回避できますStartAsTask

独自CancellationTokenSourceのトークンを使用してトークンを作成し、トークンをF#非同期に明示的に渡すことをお勧めします。これDisposeにより、独自の条件でCTSを実行できます。

(関係のない別のリークが発生した場合はStartChild、小さな再現が必要なので、修正できます!)

于 2012-03-15T17:37:55.173 に答える