C# 为什么我的新XmlTextReader(stream)在内存中读取很多兆字节,而不是正确地进行流式处理?

C# 为什么我的新XmlTextReader(stream)在内存中读取很多兆字节,而不是正确地进行流式处理?,c#,xml,stream,out-of-memory,xmlreader,C#,Xml,Stream,Out Of Memory,Xmlreader,当将XML流式传输到XmlReader时,我遇到了内存不足异常!查看内存分析器,我们可以看到它正在调用StringBuilder.Append,一次又一次地调用,导致大量128KB的缓冲区填满了所有内存 这与“流媒体”截然相反。它不应该加载超过一个4KB的缓冲区。通过阅读.NET源代码,发现有一种“v1compat”模式确实会提前读取,从而破坏了流式传输的目的。那么,你如何避免它进入那种愚蠢的模式呢 事实证明,调用“new XmlTextReader(stream)”和“XmlReader.Cr

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


这与“流媒体”截然相反。它不应该加载超过一个4KB的缓冲区。

通过阅读.NET源代码,发现有一种“v1compat”模式确实会提前读取,从而破坏了流式传输的目的。那么,你如何避免它进入那种愚蠢的模式呢

事实证明,调用“new XmlTextReader(stream)”和“XmlReader.Create(stream)”之间有着巨大的区别,微软并没有费心去记录它们。。。我在任何地方都找不到任何帖子。。。前者将其置于“v1compat”模式


所以,除非您需要您的XmlReader的行为与.NET1.1中的行为完全相同,包括不正确的流行为,否则您永远不应该调用“new XmlTextReader(stream)”。。。如果需要尝试匹配XmlTextReader使用的设置,请改用“XmlReader.Create(stream)”或采用XmlReaderSettings的变体之一(如果您没有通过XmlReaderSettings,那么至少有些设置会有所不同……我不确定哪些设置最适合“new XmlTextReader”……如果有人知道,请在这里添加!

如果我使用
XmlReader.Create()
,将结果强制转换为
XmlTextReader
,并从此开始使用它?它仍然会激活vCompat模式吗?更新:实际创建的实例是
XmlTextReaderImpl
,它是System.Xml程序集内部的,不能强制转换为
XmlTextReader
。然后我们应该如何使用特性规范是否与
XmlTextReader
相关,例如
EntityHandling
属性?