我有WCF服务,它从xml读取数据。xml中的数据每1分钟进行一次更改。这个xml非常大,它有大约16k条记录。解析这需要大约7秒。所以这绝对是太久了。
现在,它以这样的方式工作:
当然,缓存时间为1分钟,但在缓存之后,WCF必须再次加载数据。
是否有可能在不停止站点的情况下刷新数据?就像..。我不知道,双重缓冲?如果没有新的数据,它会检索旧数据吗?也许你知道更好的解决方案?
诚挚的问候
编辑:花费最长时间的语句:
XDocument = XDocument.Load(XmlReader.Create(uri)); //takes 7 sec.解析需要70毫秒,也可以,但这不是问题所在。有没有更好的解决办法不封锁网站?:)
EDIT2:好的,我找到了一个更好的解决方案。简单地说,我将xml下载到hdd并从中读取数据。然后,另一个过程开始下载新版本的xml并替换旧的。为了订婚。
发布于 2011-06-21 14:50:16
您似乎拥有从XML创建对象模型的XML对象工具。
通常所花费的大部分时间不是解析,而是创建所有这些对象来表示数据。
因此,您可能只想提取XML数据的一部分,这对您来说更快,而不是系统地创建一个大对象树,只用于提取其中的一部分。
例如,您可以使用XPath从XML文件中提取所需的片段。
我在过去使用过一个很好的XML解析工具,主要关注性能。它被称为vtd(参见http://vtd-xml.sourceforge.net/)。
它支持XPath和其他XML技术。
有一个C#版本。我使用过Java版本,但我确信C#版本具有相同的质量。
也是一个不错的工具,它可能对您有好处。
发布于 2011-06-21 13:59:09
这都取决于您的数据库设计。如果您以某种方式设计数据库,您可以识别哪些数据已经被查询,那么对于每个新的查询,只返回一个从上次查询时间到当前时间的记录差异。
也许您可以为每个记录添加行戳并在每个add /编辑/delete操作上更新它,然后您可以轻松地从这个答案的开始实现逻辑。
另外,如果不希望第一次调用花费很长时间(当必须收集初始数据时),请考虑在本地存储该数据。
然后使用其他的XML (比如JSON)。如果XML开销很大,请尝试将长元素名称替换为更短的元素名称(比如单个char元素名称)。
看一看这个:
发布于 2011-06-21 14:41:06
如果使用几个叠射,它可能会告诉您,最大的“瓶颈”不是解析,而是数据结构分配、初始化和随后的垃圾收集。如果是这样的话,绕过它的一种方法是拥有一个预先分配的行对象池并重用它们。
另外,如果每个项目都被附加到列表中,您可能会发现它花费了很大一部分时间进行追加。简单地将每个新行推到前面,然后在最后反转整个列表可能会更快。
(但不要实现这些东西,除非你用堆栈来证明它们是问题。)在那之前,他们只是猜测。)
我的经验是,XML的真正成本不是解析,而是数据结构操作。
https://stackoverflow.com/questions/6426469
复制相似问题