が、私は私の記憶リーク狩りにはまだだと私は次のように気づいた:非同期およびCancellationTokens/CancellationTokenSourceメモリ-問題
私はF#のデフォルトから来るSystem.Threading.CancellationCallbackInfo-オブジェクトのライブインスタンスがたくさんあります-CancellationTokenSource(非同期ワークフロー)。
ソースを自分で宣言し、これをMailboxProcessorの内側で使用して子やタスクにまたがる場合、問題はさらに悪化します。 CancellationTokenSourceは、このような参照を保持しているので、GCは、それらのスパンタスク/ワークフローを収集することはできませんように
は思え:それらCancellationCallbackInfo-オブジェクトのほとんどはGen2のになる - 私はちょうど内部のローカル参照を使用して信じられませんMailboxProcessors- "ループ"ワークフロー...
これは既知の問題ですか?解決策はありますか?私は、このためのコードをキャンセル-サポートとスレッドManualResetEventsを使用して立ち止まった今の
...素敵ではない全く:(
動作を示すサンプルを投稿できますか?それを自分で実行することができなくても問題を分析するのは難しいです... –
私はオフィスのATMにはいませんが、コードに行くとすぐに何かを接続しようとしますが、コアはそれほど難しくありません:この部分はMailboxProcessorからまっすぐに来ています。私は、 "キューに入れられた" IObservable実装のための仕事場として使用します(値はMailboxProcessors-inboxとProcessor "OnNext"すべての登録済みオブザーバにキューイングします)メールボックスプロセッサですが、テール再帰的な非同期の "Check" -Loopコンストラクトで、リモートホストに非同期的にpingしようとするタスクにまたがります – Carsten