asp.net - 普通缓存类和MemoryCache类有什么区别?

标签 asp.net memorycache

普通缓存类和MemoryCache类有什么区别?

缓存是指存储在内存中的数据。那么为什么要为 MemoryCache 提供额外的类呢?

MemoryCache 类的用途是什么?何时使用它来代替普通缓存类?

请看下面的示例代码

private void btnGet_Click(object sender, EventArgs e)
{
    ObjectCache cache = MemoryCache.Default;
    string fileContents = cache["filecontents"] as string;

    if (fileContents == null)
    {
        CacheItemPolicy policy = new CacheItemPolicy();

        List<string> filePaths = new List<string>();
        filePaths.Add("c:\\cache\\example.txt");

        policy.ChangeMonitors.Add(new 
        HostFileChangeMonitor(filePaths));

        // Fetch the file contents.
        fileContents = 
            File.ReadAllText("c:\\cache\\example.txt");

        cache.Set("filecontents", fileContents, policy);
    }

    Label1.Text = fileContents;
}

上面的代码做了什么?是否监控文件内容变化?

最佳答案

HttpRuntime.Cache 获取当前应用程序的缓存。
看这里
msdn

MemoryCache是​​存储在内存中的缓存。 表示实现内存缓存的类型。
msdn

这是一个优秀的博客,可以消除您所有的疑虑 blog
仅摘自此博客的几行内容。

msdn 说 this
Cache 类不适合在 ASP.NET 应用程序之外使用。它经过设计和测试,可在 ASP.NET 中使用,为 Web 应用程序提供缓存。在其他类型的应用程序中,例如控制台应用程序或 Windows 窗体应用程序,ASP.NET 缓存可能无法正常工作。

尽管 Microsoft 始终坚称 ASP.NET 缓存不适合在 Web 之外使用。但许多人仍然停留在 .NET 2.0 和 .NET 3.5 中,并且需要一些东西来使用。

Microsoft 最终在最新版本的 .NET Framework 中实现了一个抽象 ObjectCache 类,以及一个 MemoryCache 实现,该实现继承并实现了 ObjectCache,用于非 Web 设置中的内存用途。 System.Runtime.Caching.ObjectCache 位于 System.Runtime.Caching.dll 程序集中。它是一个抽象类,它声明的 .NET 1.0 样式接口(interface)与 ASP.NET 缓存中的接口(interface)基本相同。

System.Runtime.Caching.MemoryCache 是 ObjectCache 的内存中实现,与 ASP.NET 缓存非常相似,但有一些更改。

关于asp.net - 普通缓存类和MemoryCache类有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32382743/

相关文章:

c# - EF 4.0 中看似无限的堆栈跟踪和负载下的查询性能不佳

asp.net - 将 MemoryCache 与 HostFileChangeMonitor 一起使用 init 到目录会出现 ArgumentOutOfRangeException

c# - Web API 中的内存缓存

c# - 无法从 ViewComponent 中解析缓存服务

c# - .Where Lambda 表达式加载整个表

asp.net - 无法在 Web 应用程序 VS2012 中找到全局 asax 文件

asp.net - 如何创建星级评定系统?

c# - c#代码背后的ObjectDataSource?

c# - 使用缓存机制进行节流有问题吗?

c - C volatile变量和高速缓存