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

当我将XML中的STREAMING转换为XmlReader时,我得到了Out of Memory Exceptions! 查看内存分析器,我们可以看到它一遍又一遍地调用StringBuilder.Append,导致大量128KB缓冲区填充所有内存。

这与“流媒体”相反。 它不应该加载多个4KB缓冲区。

通过.NET源代码阅读,结果发现有一种“v1compat”模式确实会提前读取,从而无法实现流式传输的目的。 那么,你如何避免陷入这种愚蠢的模式?

事实certificate,调用’new XmlTextReader(stream)’和’XmlReader.Create(stream)’之间有一个巨大的区别,微软没有费心去记录……而我在任何地方都找不到任何post……前者将其置于’v1compat’模式!

Sooo,除非你需要你的XmlReader与.NET 1.1中的行为完全一样,包括不正确的流行为,否则你永远不应该调用’new XmlTextReader(stream)’而是使用’XmlReader.Create(stream)’或者一个如果您需要尝试匹配XmlTextReader使用的设置,那么采用XmlReaderSettings的变体(如果您没有传递XmlReaderSettings,那么至少一些设置会有所不同……我不确定哪些设置最匹配’new XmlTextReader’…如果有人知道,请在此添加!