首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >海量数据问题

海量数据问题
EN

Stack Overflow用户
提问于 2011-06-21 13:55:29
回答 3查看 229关注 0票数 2

我有WCF服务,它从xml读取数据。xml中的数据每1分钟进行一次更改。这个xml非常大,它有大约16k条记录。解析这需要大约7秒。所以这绝对是太久了。

现在,它以这样的方式工作:

  1. ASP.NET调用WCF
  2. WCF解析xml
  3. ASP.NET正在等待WCF回调
  4. WCF将数据返回给ASP.NET

当然,缓存时间为1分钟,但在缓存之后,WCF必须再次加载数据。

是否有可能在不停止站点的情况下刷新数据?就像..。我不知道,双重缓冲?如果没有新的数据,它会检索旧数据吗?也许你知道更好的解决方案?

诚挚的问候

编辑:花费最长时间的语句:

代码语言:javascript
复制
        XDocument = XDocument.Load(XmlReader.Create(uri)); //takes 7 sec.

解析需要70毫秒,也可以,但这不是问题所在。有没有更好的解决办法不封锁网站?:)

EDIT2:好的,我找到了一个更好的解决方案。简单地说,我将xml下载到hdd并从中读取数据。然后,另一个过程开始下载新版本的xml并替换旧的。为了订婚。

EN

回答 3

Stack Overflow用户

发布于 2011-06-21 14:50:16

您似乎拥有从XML创建对象模型的XML对象工具。

通常所花费的大部分时间不是解析,而是创建所有这些对象来表示数据。

因此,您可能只想提取XML数据的一部分,这对您来说更快,而不是系统地创建一个大对象树,只用于提取其中的一部分。

例如,您可以使用XPath从XML文件中提取所需的片段。

我在过去使用过一个很好的XML解析工具,主要关注性能。它被称为vtd(参见http://vtd-xml.sourceforge.net/)。

它支持XPath和其他XML技术。

有一个C#版本。我使用过Java版本,但我确信C#版本具有相同的质量。

也是一个不错的工具,它可能对您有好处。

票数 2
EN

Stack Overflow用户

发布于 2011-06-21 13:59:09

这都取决于您的数据库设计。如果您以某种方式设计数据库,您可以识别哪些数据已经被查询,那么对于每个新的查询,只返回一个从上次查询时间到当前时间的记录差异。

也许您可以为每个记录添加行戳并在每个add /编辑/delete操作上更新它,然后您可以轻松地从这个答案的开始实现逻辑。

另外,如果不希望第一次调用花费很长时间(当必须收集初始数据时),请考虑在本地存储该数据。

然后使用其他的XML (比如JSON)。如果XML开销很大,请尝试将长元素名称替换为更短的元素名称(比如单个char元素名称)。

看一看这个:

  1. 在Silverlight中向WCF添加压缩的最简单方法是什么?
  2. 使用JSON库从C#创建JSON
票数 1
EN

Stack Overflow用户

发布于 2011-06-21 14:41:06

如果使用几个叠射,它可能会告诉您,最大的“瓶颈”不是解析,而是数据结构分配、初始化和随后的垃圾收集。如果是这样的话,绕过它的一种方法是拥有一个预先分配的行对象池并重用它们。

另外,如果每个项目都被附加到列表中,您可能会发现它花费了很大一部分时间进行追加。简单地将每个新行推到前面,然后在最后反转整个列表可能会更快。

(但不要实现这些东西,除非你用堆栈来证明它们是问题。)在那之前,他们只是猜测。)

我的经验是,XML的真正成本不是解析,而是数据结构操作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6426469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档