c# - 自长时间操作开始以来,很难确定 ASP.Net 中的数据缓存是否已更改

标签 c# asp.net caching

我将一个列表插入到 ASP.Net 中的数据缓存中,如下面的示例代码所示。我使用 C# 作为编程语言。

我无法找到以下问题的解决方案:

  1. 启动了可能持续 0.1 秒到 20 秒的长时间数据库操作。
  2. 在此操作结束时,我需要确定自长时间操作开始以来(即操作正在进行时),名称为“dSummary”的缓存是否已从数据库重新插入或刷新.

我用来插入缓存项的代码如下:

      List<Doc> ds = GetDocSummary();
   System.Web.HttpContext.Current.Cache.Insert("dSummary", ds, null, 
           DateTime.Now.AddMinutes(15), System.Web.Caching.Cache.NoSlidingExpiration);

更新 1:

在收到如此多的回复后,我认为一个可能万无一失的方法是将 guid 字符串与 List 对象一起存储在缓存中。然后我可以简单地比较长操作之前和之后存储在 Cache 中的对象的 guid 字符串属性。如果它们相同,则 Cache["dSummary"] 尚未重新插入,否则已被重新插入。 所以我需要使用以下“Doc”类的扩展类。

public class DocX : Doc
 { 
          public UniQueIdentifier { get;set; }
          public DocX ( Doc doc, string unqiueIdentifier)
             {
                  this.Doc = doc;
                  this.UniqueIdentifier = unqiueIdentifier;

            }
 }

然后我将使用以下代码插入缓存:

       List<Doc> ds = GetDocSummary();
       System.Web.HttpContext.Current.Cache.Insert("dSummary",new DocX( ds,  
                new Guid.Newguid().ToString() ), null, 
           DateTime.Now.AddMinutes(15), System.Web.Caching.Cache.NoSlidingExpiration);

最佳答案

我只会在您添加或更新 dSummary 时添加另一个 Cache 属性,其中包含您修改它的时间戳。

您可以在长时间运行的操作开始时记录原始值,并在结束时将其与缓存中的当前值进行比较;如果值不同,则数据已更新。

关于c# - 自长时间操作开始以来,很难确定 ASP.Net 中的数据缓存是否已更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14114077/

相关文章:

c# - 没有管理用户配置文件权限的 Sharepoint UserProfileManager

asp.net - 照片网站的建议数据库架构

javascript - 什么是记忆化?

c# - 将 ObservableCollection 复制到另一个 ObservableCollection

c# - 在 TextBox 条目暂停期间引发 PropertyChanged 事件?

c# - 如何在输入用户名时显示密码?

asp.net - 使用 "!important"覆盖 SharePoint 2010 母版页的 css 属性

caching - 用于缓存的 Java EE @Singleton EJB

javascript - 通过在 php 中即时生成的浏览器缓存 JS 文件

c# - ResourceDictionary.Source 属性中的 MarkupExtension