gpt4 book ai didi

.net - 滥用 XmlReader ReadSubtree()

转载 作者:数据小太阳 更新时间:2023-10-29 02:00:42 30 4
gpt4 key购买 nike

我需要解析一个 xml 文件,它实际上是一个非常大的树结构的图像,所以我使用 XmlReader 类来“动态”填充树。每个节点仅通过 ReadSubtree() 函数传递它期望从其父节点获得的 xml block 。这样做的好处是不必担心节点何时消耗完其所有子节点。但现在我想知道这是否真的是个好主意,因为可能有数千个节点,并且在阅读 .NET 源文件时我发现每次 ReadSubtree 调用都会创建几个(可能更多)新对象,并且没有对可重用对象进行缓存(我见过)。

也许 ReadSubtree() 没有被认为被大量使用,或者也许我只是白担心,我只需要在解析文件后调用 GC.Collect()...

希望有人能对此有所启发。

提前致谢。

更新:

感谢您的精彩而富有洞察力的回答。

我深入研究了 .NET 源代码,发现它比我最初想象的要复杂。我终于放弃了在这种情况下调用此函数的想法。正如 Stefan 指出的那样,xml 读取器永远不会传递给外部人员,我可以信任解析 xml 流的代码(这是我自己编写的),所以我宁愿强制每个节点对它们的数据量负责从流中窃取比使用末尾不那么薄的 ReadSubtree() 函数只节省几行代码。

最佳答案

ReadSubTree() 为您提供了一个包装原始 XmlReader 的 XmlReader。这个新阅读器以完整文档的形式出现在消费者面前。如果您传递子树的代码认为它正在获取独立的 xml 文档,这可能很重要。例如,新 Reader 的 Depth 属性从 0 开始。它是一个非常薄的包装器,因此与直接使用原始 XmlReader 相比,您不会使用更多的资源,在您给出的示例中,它是很可能您并没有真正从子树阅读器中得到多少。

在您的情况下,最大的优势是子树阅读器不会意外读取子树。由于子树阅读器不是很昂贵,所以这种安全性可能就足够了,尽管当您需要子树看起来像文档或者您不相信代码只会读取它自己的子树时,它通常更有帮助。

如 Will 所述,您永远不想调用 GC.Collect()。它永远不会提高性能。

关于.net - 滥用 XmlReader ReadSubtree(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/114327/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com