有没有人知道无缓冲的XmlReader实现?
不是XmlTextReaderImpl在内部使用byte []缓冲区并在构造时从流中读取!我发现这令人非常恼火。我只希望XmlReader在对象上实际调用Read *时读取。不要缓冲数据或类似数据。
注意:我不是在谈论缓存与非缓存。但是流缓冲,例如在XmlTextReader内部发生。
我想在我每次要反序列化对象时必须创建一个新的XmlTextReader的场景中使用它,但是因为这会在每次对垃圾收集器施加很大压力时创建一个大小为4096的缓冲区。所以我想保留一个XmlReader的实例(它可以连续读取xml对象的流),但这对于BCL实现是不可能的,或者有一个不创建缓冲区的XmlReader。
答案 0 :(得分:1)
不能创建缓冲区是不可能的。
解析器需要具有前瞻性,更不用说NameTables进行快速处理。
4096看起来很大,但可能是最有效的单位:它与一页虚拟内存重合,可以用代替许多重复的小分配(?猜测)
然而,重用该实例本来不错。您可以查看单声道实现并根据自己的喜好进行操作:
https://github.com/mono/mono/blob/master/mcs/class/System.XML/System.Xml/XmlTextReader.cs