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

我推出了自己的“Cache”,因为我不知道更好,它看起来有点像这样:

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)而不是这个?

有帮助吗?

解决方案

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

微软有一个工程师团队正在研究这个问题,他们可能已经成功地从系统中榨取了比你所能达到的更多的性能。ASP.NET 的内置缓存也可能在不同级别运行(您的应用程序无法访问),从而使其速度更快。

其他提示

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

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

缓存的难点在于选择安全缓存的内容以及缓存的时间。对于数据频繁更改的应用程序,您可能会引入一些难以排除缓存的错误,因此请小心。

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

在您的情况(数据缓存)中,您错过的功能之一是如果 SQL Server 上的数据以某种方式更新(SQL 缓存依赖项),则能够使缓存失效并刷新。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top