为什么我的新 XmlTextReader(stream) 以数兆字节读入内存而不是正确地流式传输?

Why is my new XmlTextReader(stream) reading in many megabytes into memory rather than streaming properly?

在 XML 中将流式传输到 XmlReader 时出现内存不足异常!查看内存分析器,我们可以看到它一遍又一遍地调用 StringBuilder.Append,导致大量 128KB 缓冲区填满所有内存。

这与 "streaming" 完全相反。它不应加载超过一个 4KB 缓冲区。

通读了.NET源代码,发现有一种"v1compat"模式确实会超前读取,违背了流式传输的目的。那么,如何避免进入那种愚蠢的模式?

事实证明,调用 'new XmlTextReader(stream)' 和 'XmlReader.Create(stream)' 之间存在巨大差异,Microsoft 没有费心记录...而且我在任何地方都找不到任何 post ...前者将其置于 'v1compat' 模式!!!

Sooo,除非您需要 XmlReader 的行为与它在 .NET 1.1 中的行为完全相同,包括不正确的流行为,否则您永远不要调用 'new XmlTextReader(stream)' ... 而是使用 'XmlReader.Create(stream)' 或一个如果您需要尝试匹配使用的 XmlTextReader 设置,则采用 XmlReaderSettings 的变体(如果您不传递 XmlReaderSettings,那么至少某些设置会有所不同......我不确定哪些设置最匹配'new XmlTextReader'...如果有人知道,请在这里补充!