【发布时间】:2012-11-19 06:41:24
【问题描述】:
我们有一个现有的 asp.net 4.0 网站,它使用 HttpRuntime.Cache 做很多事情。它是在我开始工作之前这样创建的,现在我们遇到了缓存被清除和网站崩溃的问题,因为它总是希望缓存在那里(我知道......他们认为缓存是什么? !?)。
所以我需要的是一个永久的替换缓存,这样我就可以将它换成 HttpRuntime.Cache 而不会影响网站。我已经研究过序列化,但并非所有对象都是可序列化的,并且不能让它们全部可序列化(其中太多的对象分散在各处)。
有没有办法将内存中的任何对象/变量/任何内容保存到磁盘,并在以后读取它,而无需序列化它?
更新:
感谢您的 cmets 和到目前为止的回答。从你的想法开始,我做了更多的谷歌搜索,发现这篇文章演示了(通过一个可以下载的示例解决方案)如何在 .Net 4.0 中使用你自己的自定义缓存提供程序。我还不能将它集成到我们的 Web 应用程序中并对其进行适当的测试(希望今天晚些时候我能够),但我想我会把它放在这里看看你是否对此有任何想法。 ..那么你怎么看,我应该注意什么警告?或者这是一个可行的(并且非常临时的)解决方案?
File-Based Cache for Web and non-Web Apps plus Extend ASP.NET 4.0 OutputCacheProvider
【问题讨论】:
-
把缓存实体写成csv文件?
-
我不知道在 C# 中是否可行:在 C 中,我会将内存位置映射(mmap)到磁盘位置(文件)。那么内存和磁盘文件将始终相同。可能这里的一些 C# 大师会给你一个更好的答案;)
-
如果清除缓存后应用程序设计失败,则说明您的应用程序设计有问题。如果在缓存中没有找到任何项目,则应从其源位置获取。
-
@KirillBestemyanov 我认为他理解这一点。 (注意“我知道......他们认为缓存是什么!?”)这不是他的设计——他试图在它被替换之前让它保持运行。
-
@KirillBestemyanov 完全正确,谢谢 :-)
标签: c# asp.net serialization