我需要解析一个 xml 文件,它实际上是一个非常大的树结构的图像,所以我使用 XmlReader 类来“动态”填充树。每个节点仅通过 ReadSubtree() 函数从其父节点传递它期望的 xml 块。这样做的好处是不必担心节点何时消耗了它的所有子节点。但现在我想知道这是否真的是一个好主意,因为可能有数千个节点,并且在阅读 .NET 源文件时,我发现每次调用 ReadSubtree 都会创建几个(可能更多)新对象,并且没有缓存可重用对象(我见过)。
也许 ReadSubtree() 没有被认为被大量使用,或者我只是什么都不担心,我只需要在解析文件后调用 GC.Collect() ......
希望有人可以对此有所了解。
提前致谢。
更新:
感谢您提供的精彩而有见地的答案。
我深入研究了 .NET 源代码,发现它比我最初想象的要复杂。我终于放弃了在这种情况下调用这个函数的想法。正如 Stefan 指出的那样,xml 阅读器永远不会传递给外人,我可以信任解析 xml 流的代码(由我自己编写),所以我宁愿强制每个节点对它们的数据量负责从流中窃取而不是使用最终不那么薄的 ReadSubtree() 函数来节省几行代码。