Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.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# 比xsd生成的类读取XML文件更快_C#_.net_Xml_Performance - Fatal编程技术网

C# 比xsd生成的类读取XML文件更快

C# 比xsd生成的类读取XML文件更快,c#,.net,xml,performance,C#,.net,Xml,Performance,我正在处理大量包含HL7信息的XML文件 这些XML文件的结构在几个复杂的XSD文件中描述。它们是XSD文件的层次结构。像这样: var bytes = Encoding.ASCII.GetBytes(message.Message); var memoryStream = new MemoryStream(bytes); var message = ormSerializer.Deserialize(memoryStream); Messages.xsd batch.xsd datatyp

我正在处理大量包含HL7信息的XML文件

这些XML文件的结构在几个复杂的XSD文件中描述。它们是XSD文件的层次结构。像这样:

var bytes = Encoding.ASCII.GetBytes(message.Message);
var memoryStream = new MemoryStream(bytes);
var message = ormSerializer.Deserialize(memoryStream); 
Messages.xsd batch.xsd datatypes.xsd Fields.xsd MoreFiles.xsd Fields.xsd 这不是确切的用法,但它有助于传达它们是如何工作的

现在我可以跑步了

xsd.\messages.xsd/classes

它生成了一个名为messages.cs文件的文件,长度超过240000行

注意:尽管XSD很复杂,但实际的xml文件平均大约有250行xml,每行大约25个字符,并不是很大

我可以使用该文件反序列化xml文件,如下所示:

var bytes = Encoding.ASCII.GetBytes(message.Message);
var memoryStream = new MemoryStream(bytes);
var message = ormSerializer.Deserialize(memoryStream); 
这一切工作得又快又好

当需要从xml结构中提取数据时,速度太慢

有没有其他更快的方法来访问我的xml数据?我应该使用XPathDocument和XPathNavigator吗?XPathNavigator可以使用所有XSD文件吗?这样我就不必为我处理的每个xml文件重新创建它。不是所有xml节点都在所有xml文件中吗


还有其他快速输出XML数据的方法吗?

您正在使用的将XML自动映射到Java或C类的技术称为数据绑定,当模式简单且较小时,它工作得很好。对于像HL7这样又大又丑的东西,我会说它不是首发


你在做什么样的处理?有什么好的理由不能在XSLT或XQuery中使用它吗?这些语言是为处理XML而设计的,它们避免了当您必须将数据从XML模型转换为编程语言(如Java或C)的数据模型时所遇到的阻抗不匹配问题。

您看过类似XStreamingReader的东西吗?它允许您在对大型XML文档进行流式处理时使用LINQtoXML。我在过去研究过这一点,能够通过XML流,识别XML块并将它们反序列化为对象。如果你搞砸了,需要一些例子,我可以把代码挖出来


也许我们应该重新考虑一下获取数据的部分。为什么不让代码使用XML呢?换句话说,停止将XML序列化为成员变量,让您的类直接对内存中的XML文档和元素进行操作。祝你好运,祝你好运。我很困惑-你说反序列化很快,然后说访问值太慢。。。是哪一个?我错过了什么?@Marc-真奇怪。但反序列化的呼声很快就响起了。但是对它填充的对象结构的调用很慢。对象结构是由XSD命令行工具生成的。Messages.cs反序列化后,应为平面类模型;您是否有一个缓慢查询的示例?注意:反序列化大约需要3毫秒。对反序列化的调用是否可能使用延迟执行?我只是从XML文件中提取select值。我承认我通常不会解析XML。我将研究xquery,看看它是否比我现在做的更好/更快。谢谢。事实上,我称之为反序列化。数据绑定通常指的是UI绑定等,而OP报告的速度不会太慢: