これを行ってよいかどうかはわかりませんが、この質問は、調査を行っているときに偶然見つけた、間違っていると思われる情報源に関係しているため、ここで議論できればと思っています. http://www.red-gate.com/products/dotnet-development/ants-memory-profiler/learning-memory-management/WPF-silverlight-pitfallsで、Chris Farrellは次のようにするとメモリ リークが発生すると述べています。
...
Order newOrder = new Order(“EURUSD”, ...);
newOrder.OnPlaced += OrderPlaced;
m_PendingDeals.Add(newOrder);
...
void OrderPlaced(Order placedOrder)
{
m_PendingDeals.Remove(placedOrder);
}
次のことが述べられています。
OrderPlaced イベント ハンドラーは、OnPlaced イベントをサブスクライブしたときからの Order オブジェクトへの参照をまだ保持しており、コレクションから削除しても、その参照によって Order オブジェクトは存続します。この間違いを犯すのはとても簡単です。
この説明は正しいですか?
そうではないと思います: 私が見る限り、イベント サブスクライバーの関数ポインターへの参照、つまりイベント サブスクライバーへの参照を保持するのはイベント通知機能であり、その逆ではありません。この場合、処理クラスへの参照を保持しているのは Order であり、その Order が削除されると、その Order への参照が他にないと仮定して、実際にはメモリから正しくクリアされます。考え?