ASP.NET 缓存

Posted

技术标签:

【中文标题】ASP.NET 缓存【英文标题】:ASP.NET Caching 【发布时间】:2010-09-05 21:13:47 【问题描述】:

最近我一直在研究 ASP.NET 中缓存的可能性。

我滚动了自己的“缓存”,因为我不知道更好,它看起来有点像这样:

public class DataManager


      private static DataManager s_instance;

      public static DataManager GetInstance()
      
      

      private Data[] m_myData;
      private DataTime m_cacheTime;

      public Data[] GetData()
      
            TimeSpan span = DateTime.Now.Substract(m_cacheTime);

            if(span.TotalSeconds > 10)
            
                  // Do SQL to get data
                  m_myData = data;
                  m_cacheTime = DateTime.Now;
                  return m_myData;     
            
            else
            
                  return m_myData;
            
      


所以值会在单例中存储一段时间,当时间到期时,值会被更新。如果时间尚未到期,并且完成了对数据的请求,则返回字段中存储的值。

使用真正的方法(http://msdn.microsoft.com/en-us/library/aa478965.aspx)代替这个有什么好处?

【问题讨论】:

【参考方案1】:

我认为“让计算机做它;它比你更聪明”的格言在这里适用。就像内存管理和其他复杂的事情一样,计算机比你更了解它在做什么;因此,能够获得比您更高的性能。

Microsoft 有一个工程师团队致力于此工作,他们可能已经设法从系统中挤出比您所能做到的更多的性能。 ASP.NET 的内置缓存也可能在不同的级别(您的应用程序无法访问)运行,从而使其速度更快。

【讨论】:

【参考方案2】:

ASP.NET 缓存机制已经存在了一段时间,所以它很稳定并且很好理解。有很多资源可以帮助您充分利用它。

根据您的要求,自行开发可能是正确的解决方案。

关于缓存的难点在于选择可以安全缓存的内容以及何时缓存。对于数据经常变化的应用程序,您可能会引入一些难以解决的缓存错误,因此请小心。

【讨论】:

【参考方案3】:

ASP.NET 中的缓存功能丰富,您可以以非常精细的方式配置缓存。

在您的情况下(数据缓存),您错过的功能之一是如果 SQL 服务器上的数据以某种方式更新(SQL 缓存依赖关系),则能够使缓存无效并刷新缓存。

http://msdn.microsoft.com/en-us/library/ms178604.aspx

【讨论】:

以上是关于ASP.NET 缓存的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET-缓存基本知识点

ASP.NET Core中的缓存[1]:如何在一个ASP.NET Core应用中使用缓存

在 asp.net 中锁定缓存的最佳方法是啥?

ASP.NET缓存策略经验谈

ASP.NET-缓存outputcache参数

ASP.NET Cache缓存的用法