実際には非常に大きなツリー構造のイメージである xml ファイルを解析する必要があるため、XmlReader クラスを使用してツリーを「オンザフライ」で設定します。各ノードには、ReadSubtree() 関数を介して、その親から期待される xml チャンクだけが渡されます。これには、ノードがすべての子をいつ消費したかを気にする必要がないという利点があります。何千ものノードが存在する可能性があり、.NET ソース ファイルを読み込んでいるときに、ReadSubtree 呼び出しごとに新しいオブジェクトがいくつか (おそらくそれ以上) 作成されていることがわかったので、これが実際に良い考えであるかどうか疑問に思っています。再利用可能なオブジェクトのキャッシュは作成されません (私が見たものです)。
ReadSubtree() が大量に使用されるとは考えられていなかったのかもしれませんし、ファイルを解析した後に GC.Collect() を呼び出す必要があるだけで、何も心配していないのかもしれません...
誰かがこれに光を当ててくれることを願っています。
前もって感謝します。
アップデート:
素晴らしく洞察に満ちた回答をありがとう。
.NET ソース コードを詳しく調べたところ、最初に想像したよりも複雑であることがわかりました。私は最終的に、まさにこのシナリオでこの関数を呼び出すという考えを放棄しました。Stefan が指摘したように、xml リーダーは部外者に渡されることはなく、xml ストリームを解析するコード (自分で作成したもの) を信頼できるので、各ノードにデータ量の責任を負わせたいと思います。それほど薄くない ReadSubtree() 関数を使用して数行のコードを保存するよりも、ストリームから盗みます。