加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

.net – 如何提高XML读写性能

发布时间:2020-12-16 05:35:15 所属栏目:百科 来源:网络整理
导读:我有两个独立运行的.NET应用程序(可以以任何顺序启动,或者可能只运行一个),它使用 XML作为数据存储.因此,两个应用程序都可以读写XML文件. 为了保持数据更新,我在读取和写入操作之前每次都从磁盘加载XML文件.我正在使用XPath查询来查询特定节点. 现在这个方法
我有两个独立运行的.NET应用程序(可以以任何顺序启动,或者可能只运行一个),它使用 XML作为数据存储.因此,两个应用程序都可以读写XML文件.
为了保持数据更新,我在读取和写入操作之前每次都从磁盘加载XML文件.我正在使用XPath查询来查询特定节点.
现在这个方法存在性能问题,因为每秒都有一个应用程序对XML进行读写请求(使用轮询,不能更改)
我不确定究竟是什么导致了性能损失,但我相信它的连续读写.

我尝试使用.NET 4.0中的内存映射文件,但我限制使用.NET 3.5而不是更高版本.

任何人都可以帮我解决这个问题吗?

注意:XML节点具有一些公共属性,不同数量的属性和一个用于XPath查询的ID.

如果您确定性能影响来自I / O并且您无法更改这两个应用程序,那么您可以做一些事情.

对现有应用程序代码零更改的第一个解决方案:使用RAM disk.如果他们将该文件用作共享内存,则可以在不进行任何其他更改的情况下执行此操作.如果数据是持久的,则可能需要在每次写入后对其他媒体执行后台复制.性能不如真正的共享内存好,但至少你不必等待慢速I / O操作.

仅在必须读取数据的应用程序中进行更改的第二个解决方案:通常解析XML文件的速度非常慢(特别是如果您使用的是XmlDocument并且文件不是很少).在这种情况下,使用XmlReader,您必须使您的读取代码更复杂并忘记XPath查询,但它的性能将比XmlDocument好很多倍,并且它不会减慢增加文件大小的速度.

小(或不小)更新:如果第二个应用程序的代码(我猜是将读取文件的代码)可以更改,您可以做一些改进其性能.首先不要每次都读取文件.检查其时间戳,为该文件或其他任何内容注册FileSystemWatcher,但每次都不读取/解析文件.当你这样做时,你可以前进一步:只有当文件发生变化时才读取/解析文件,在后台(另一个线程)上准备你的XmlDocument并使其可用于轮询请求.如果请求间隔,它们甚至可以看到非常快的响应时间(但是对于典型文件,XmlDocument XPath查询的配置文件性能).

编辑:here你可以找到微软提供的RAM磁盘.它非常简单和天真,但通常你/我们不需要更多.此外,它是DDK上的一个示例,因此您也将获得源代码(在这种情况下……只是为了好玩).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读