最近、ReactiveExtensionsを使用するコードに小さなバグがあることに気づきました。タイマーを購読していましたが、購読を破棄しませんでした。これにより、メモリリークが発生しました。
この危険性を強調するスニペットを作成しました。
while (true)
{
Observable.Timer(TimeSpan.Zero, TimeSpan.FromMinutes(1)).Subscribe(Console.WriteLine);
}
これは正常な動作ですか?
サブスクライバーがアプリの他の部分との接続を失ったときにタイマーをガベージコレクションするために、スケジューラーはタイマーへの弱参照を保持するべきではありませんか?