【问题标题】:Save a C# object to disk without serializing it?将 C# 对象保存到磁盘而不对其进行序列化?
【发布时间】: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


【解决方案1】:

您可以使用反射编写自己的“序列化”,获取所有原始字段并将其保存为类路径和值。这将是长时间的操作,但您可以将类保存为文件。更好的解决方案是使用真正的序列化。

【讨论】:

  • 它不适用于某些注入的属性等(例如 - ef 中的 dbcontext 或其他)。
  • 这听起来工作量很大。还是不是那么糟糕,也许有一些图书馆会为我做这件事?
【解决方案2】:

这个链接确实有效,所以这将是我的答案。感谢大家的帮助!

File-Based Cache for Web and non-Web Apps plus Extend ASP.NET 4.0 OutputCacheProvider

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-09
    • 2014-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    相关资源
    最近更新 更多