我们正在使用自定义HttpModule构建文本模板引擎,该模板将HTML中的标签替换为XML文件中的整个文本部分。
目前,XML文件作为字符串/字符串Dictionary加载到内存中,因此使用正则表达式可以非常快速地执行HttpModule完成的查找/替换。
我们正在寻求扩展这个的使用虽然包含更大和更大的替换文本部分,我担心在同一时间将更多冗长的文本作为字典的一部分保存在内存中,尤其是当我们使用ASP时。 NET缓存也有很多用途。
是否有人建议我们可以使用更高效,可扩展的数据结构/管理策略?
更新:为了回应下面Corbin March的伟大建议,我认为这不是我们走“黑暗之路”的情况(尽管我很欣赏这种关注)。我们的应用程序旨在完全针对不同的客户端进行重新设计,直至页面上的任何位置 - 包括具有多种语言的能力。事实证明,我所描述的技术是解决这一问题的最灵活方式。
答案 0 :(得分:3)
您使用的内存量将与文件大小大致相同。 XML将在Dictionary不具备的标签中有一些开销,因此它是对内存要求的安全估计。所以你在谈论10-50 MB还是100-500 MB?我不一定会担心10到50 MB。
如果您担心,那么您需要考虑每次加载页面时是否真的需要进行替换。您是否可以每页一次访问数据库或XML文件,然后缓存ASP.NET页面的输出并保持一小时?如果是,请考虑使用Page Caching。
答案 1 :(得分:2)
一些想法:
压缩字典值。查看Scott Hanselman的cache compressing article以获得锻炼精神。如果您的字典键很大,请考虑压缩它们。
仅在请求时将XML文件中的项目加载到内存中并附加项目到期日期。如果在没有其他请求的情况下发生过期,请卸载该项目。这个想法是一些字典项的使用频率较低,因此可以接受不常用项的IO命中。显然,ASP.NET Cache会为您执行此操作 - 我假设在您处理输出时,Cache是超出上下文的。
只是一个意见......但是我的spidersense警告我,你可能会走上一条黑暗的道路。 ASP.NET的一个重要部分是它的模板功能 - 母版页,页面模板,用户控件,自定义控件,模板化控件,国际化资源方案。如果可能的话,我会尝试使用这些工具解决您的问题,而不是文本处理HttpModule。