【发布时间】:2012-04-08 12:27:20
【问题描述】:
我们通过查询我们的 sql 服务器以获取以 xml 形式返回的数据,然后使用 xslt 处理以创建最终输出,从而在我们的 Web 应用程序中生成报告。 作为加快系统速度的一种方式,我们从返回的 sql xml 中删除了所有静态信息,并缓存了一个包含所有静态信息的大型 XDocument。在执行 xsl 转换之前,我们将带有静态信息的 XDocument 附加到来自 sql server 的 xml 的末尾。静态 XDocument 大约 50Meg,从 sql server 构建需要很多秒。
我们的问题是,一旦我们开始缓存这些大型 XDoc 中的一些,我们就达到了缓存私有字节大小的限制,并且缓存被清除了。当人们在运行报表时,重建这些 XDocuments 太费时了。我没有尝试将这些 XDocs 保存到物理文件,因为每天不断发生的每个报告运行都需要它们。
我曾考虑安装 AppFabric Cache,但我不确定在其中存储 5 到 10 个这样的大型项目是否是个好主意。
有什么想法吗?如果我在 Web 服务器上安装更多内存,它会自动用于 asp.net 以获得更大的缓存吗?我尝试在将数据存储到缓存之前对其进行压缩(缩小了 5 倍),但解压缩并重新解析 XDocument 会降低服务器速度。
【问题讨论】:
-
为什么不在数据库上使用简单的自定义缓存/或将它们保存为磁盘上的文件(更好)并让这些文件使用处理程序从用户那里下载。
-
@Aristos 用户不下载静态数据,它与来自sql server的xml结合,然后通过xslt处理创建报告输出。我可以将数据保存在磁盘上,但是我需要通过 XDocument.Load() 为每个报告重新加载它。认为必须有更快的方法。
-
使用像code.google.com/p/protobuf-net这样的真正快速序列化类将最终 XDocument.Load() 的序列化版本保存到磁盘
-
@Aristos 如果您将您的评论作为答案转发,我可以将其标记为我要使用的答案!