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

时间:2015-10-05 03:36:25

标签: c# xml stream out-of-memory xmlreader

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

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

1 个答案:

答案 0 :(得分:5)

通过.NET源代码阅读,结果发现" v1compat"确实会读到未来的模式,打败流媒体的目的。那么,你怎么避免让它进入那种愚蠢的模式呢?

事实证明,在调用新的XmlTextReader(流)和#39;之间存在巨大的差异。和' XmlReader.Create(stream)'微软并没有费心去记录......而且我在任何地方都找不到任何帖子......前者把它放进了' v1compat'模式!!!

Sooo,除非你需要你的XmlReader与.NET 1.1中的行为完全一样,包括不正确的流行为,否则你永远不应该调用新的XmlTextReader(流)' ...而是使用' XmlReader.Create(stream)'如果你需要尝试匹配XmlTextReader使用的设置(如果你没有通过XmlReaderSettings,那么至少有一些设置会有所不同......或者我不知道是什么设置最符合新的XmlTextReader' ...如果有人知道,请在此添加!