Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 更快的XmlReader跳过_C#_Xml - Fatal编程技术网

C# 更快的XmlReader跳过

C# 更快的XmlReader跳过,c#,xml,C#,Xml,我有一个层次结构树中的xml文档。我有一个节点,下面有几百万个子节点 在该节点上运行XmlReader.Skip()时,需要几秒钟才能完成。有没有更快的方法跳过所有的孩子,转到下一个兄弟姐妹 有没有更快的方法跳过所有的孩子,转到下一个兄弟姐妹 如果没有看到您的代码,就不可能确切地知道可以做些什么来加速它 但通常不会。如果您真正要做的只是调用Skip()方法,并且您已经确保XmlReader配置为对XML进行最小处理,那么它所花费的时间就是它将要花费的时间 读取器必须解析所有中间XML数据,才能找

我有一个层次结构树中的xml文档。我有一个节点,下面有几百万个子节点

在该节点上运行
XmlReader.Skip()
时,需要几秒钟才能完成。有没有更快的方法跳过所有的孩子,转到下一个兄弟姐妹

有没有更快的方法跳过所有的孩子,转到下一个兄弟姐妹

如果没有看到您的代码,就不可能确切地知道可以做些什么来加速它

但通常不会。如果您真正要做的只是调用
Skip()
方法,并且您已经确保
XmlReader
配置为对XML进行最小处理,那么它所花费的时间就是它将要花费的时间

读取器必须解析所有中间XML数据,才能找到正在处理的节点的结束标记,而对于“数百万子节点”,这意味着大量的数据和解析

这就是说:如果你愿意对数据进行预处理并为其编制索引,那就不同了。但那将是更多的工作。您不能只是在
XmlReader
对象的状态下重置流位置,所以您需要更手动地进行XML解析。这一切都取决于你的计划中这一部分快速进行的重要性

(它仍然需要对XML进行索引,这本身就很耗时,但这是一个一次性的耗时操作)


另外,请注意,
XmlReader
现在有了可等待的
async
方法。这些不会使I/O本身运行得更快,但是如果这里的部分问题是在UI中阻塞I/O非常耗时,那么使用它们至少有助于保持UI的响应速度

你的问题中没有提到任何这样的问题,据我所知,根本没有。但我想我还是提一下,以防万一

有没有更快的方法跳过所有的孩子,转到下一个兄弟姐妹

如果没有看到您的代码,就不可能确切地知道可以做些什么来加速它

但通常不会。如果您真正要做的只是调用
Skip()
方法,并且您已经确保
XmlReader
配置为对XML进行最小处理,那么它所花费的时间就是它将要花费的时间

读取器必须解析所有中间XML数据,才能找到正在处理的节点的结束标记,而对于“数百万子节点”,这意味着大量的数据和解析

这就是说:如果你愿意对数据进行预处理并为其编制索引,那就不同了。但那将是更多的工作。您不能只是在
XmlReader
对象的状态下重置流位置,所以您需要更手动地进行XML解析。这一切都取决于你的计划中这一部分快速进行的重要性

(它仍然需要对XML进行索引,这本身就很耗时,但这是一个一次性的耗时操作)


另外,请注意,
XmlReader
现在有了可等待的
async
方法。这些不会使I/O本身运行得更快,但是如果这里的部分问题是在UI中阻塞I/O非常耗时,那么使用它们至少有助于保持UI的响应速度


你的问题中没有提到任何这样的问题,据我所知,根本没有。但是我想我还是提一下,以防万一。

No:-)你唯一能做的就是检查你没有验证Xml。请参阅中的Expansed external entities(扩展外部实体)表。为了提高总体读取速度,可以使用异步读取。否:-)您唯一能做的就是检查您是否没有验证Xml。请参阅中的Expansed external entities(扩展外部实体)表。为了提高总体读取速度,可以使用异步读取。您不能只是在XmlReader对象的这种状态下重置流位置,我不是很确定。。。您可以使用
XmlReader
使用的基本流来快速跳过部分XML。如果要跳过的元素具有唯一的名称(因此,如果您只想搜索第一个
,而没有
),则这种方法效果更好。如果您使用的是DTDY,这显然不起作用。您不能在XmlReader对象的状态下重置流位置,我不太确定。。。您可以使用
XmlReader
使用的基本流来快速跳过部分XML。如果要跳过的元素具有唯一的名称(因此,如果您只想搜索第一个
,而没有
),则这种方法效果更好。如果您使用的是DTD,这显然不起作用