我们在Web应用程序中生成报告,方法是查询我们的sql server以获取以xml形式返回的数据,然后使用xslt进行处理以创建最终输出。 作为加速系统的一种方法,我们从返回的sql xml中删除了所有静态信息,并缓存了一个包含所有静态信息的大型XDocument。在执行xsl转换之前,我们将带有静态信息的XDocument附加到来自sql server的xml的末尾。静态XDocument大约是50Meg,需要几秒钟才能从sql server构建。
我们的问题是,一旦我们开始缓存这些大型XDoc中的一些,我们就会达到缓存专用字节限制大小并清除缓存。在人们运行报告时,重建这些XDocuments太费时间了。我没有尝试将这些XDoc保存到物理文件中,因为每天都在不断发生的报告中需要它们。
我曾考虑安装AppFabric Cache,但我不确定在其中存储5到10个这样的大型项目是个好主意。
有什么想法吗?如果我在Web服务器上安装了更多内存,它会自动提供给asp.net以获得更大的缓存吗?我已经尝试在将数据存储到缓存之前压缩数据(缩小了5倍),但是解压缩它并重新解析XDocument会降低服务器的速度。
答案 0 :(得分:0)
您可以使用二进制格式序列化xml对象,并使用varbinary(max)
将其存储在数据库中。不确定它的性能,但它可能值得尝试,因为实现它不会花很长时间。
您可能想要解决的其他问题是第一个访问报告的用户的性能损失。为了避免这种情况,您可以预先生成报告,以便为每个人缓存它们。
答案 1 :(得分:0)
最后,只需将其保存到文件中,然后按原样重新加载,因为它已全部准备好序列化。
protobuf-net超快速且轻便且我已经测试并使用它,但它没有任何好处,因为它已全部准备好序列化。