为什么我的新XmlTextReader(stream)将许多兆字节读入内存,而不是正确地进行流传输?

Bri*_*edy 2 c# xml xmlreader stream out-of-memory

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

这与“流式传输”完全相反。它不应加载一个以上的4KB缓冲区。

Bri*_*edy 5

仔细阅读.NET源代码,结果发现确实存在一种“ v1compat”模式,该模式的确可以超前阅读,无法达到流式传输的目的。那么,如何避免使其进入那种愚蠢的模式呢?

事实证明,调用“ new XmlTextReader(stream)”和“ XmlReader.Create(stream)”之间有很大的区别,Microsoft不会去记录它们……而且我在任何地方都找不到任何信息……前者将其置于“ v1compat”模式!

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