c# - 转换后的 XML 在内存中缓存的缺点?

标签 c# asp.net xml caching

我正在编写一个 Web 应用程序,它不断地从数据库中检索 XML“组件”,然后使用 XSLT 将它们转换为 XHTML。其中一些转换经常发生(例如,“侧边栏导航”组件针对相同的 XML 输出并在具有该侧边栏的每个页面上执行相同的 XSL 转换),因此我已经开始实现一些缓存来加快速度。

在我当前的解决方案中,在每个组件尝试执行转换之前,该组件使用静态 CacheManager 对象检查是否存在已转换 XML 的缓存版本。如果是这样,组件输出这个。如果没有,该组件将执行转换,然后将转换后的 XML 与 CacheManager 对象一起存储。

CacheManager 对象在内存中存储已缓存的已转换 XML(准确地说,在 Dictionary 中)。在我的本地开发环境中,这工作得很好,但我认为这可能不是一个可扩展性很强的解决方案。

将这些数据存储在内存中的潜在缺点是什么?我是否需要限制可以存储在这样的内存数据结构中的数据量?我是否应该为这种类型的缓存完全使用不同的数据存储?

最佳答案

正如您所怀疑的那样,明显的缺点是您的缓存可能会占用大量内存。您可能想要实现一个系统,当内存压力上升时,很少使用的项目会从缓存中“过期”。微软的Caching Application Block开箱即用,几乎可以实现您需要的一切。

您可能会遇到的另一个潜在(尽管不太可能)问题是挖掘缓存以查找所需内容的成本。在某些时候,继续生成您需要的内容而不是查看缓存可能会更快。我们至少在一个与非常大的缓存和非常便宜的操作相关的精确场景中遇到过这个问题。这不太可能发生,但有可能发生。

关于c# - 转换后的 XML 在内存中缓存的缺点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3515982/

相关文章:

c# - 使用自定义消息的 MVC 3 AuthorizeAttribute 重定向

c# - 如何刷新导航上的最后一个 ContentPage

c# - Asp.Net WebApi OWIN 身份验证

c# - Xpath查找两个不同元素的第一次出现

sql - 在应用 block 中使用需要表参数的标量函数

xml - 在 Spring 3 中使用注解注册转换器和 converterFactories

c# - 在 ASP.NET 应用程序中将图像从 JavaScript 传递到 C#?

C# 打开新的 Excel 工作簿并添加数据

javascript - Masterpage.PageLoad() 中的 RegisterStartupScript 将不会在 ContentPlaceHolder 中的异步回发上运行

c# - 通过自定义跟踪监听器一次完成 WCF 请求-响应日志记录