.NET Framework 应用程序中的缓存

通过缓存,可以将数据存储在内存中以便快速访问。 再次访问数据时,应用程序可以从缓存中获取数据,而不是从原始源检索数据。 这可以提高性能和可伸缩性。 此外,缓存使数据在数据源暂时不可用时可用。

.NET Framework 提供缓存功能,可用于提高 Windows 客户端和服务器应用程序的性能和可伸缩性,包括 ASP.NET。

注释

在 .NET Framework 3.5 及更早版本中,ASP.NET 在 System.Web.Caching 命名空间中提供了内存中缓存实现。 在 .NET Framework 的早期版本中,缓存仅在命名空间中 System.Web 可用,因此需要依赖 ASP.NET 类。 在 .NET Framework 4 中 System.Runtime.Caching ,命名空间包含针对 Web 和非 Web 应用程序设计的 API。

缓存数据

可以使用命名空间中的 System.Runtime.Caching 类来缓存信息。 此命名空间中的缓存类提供以下功能:

  • 为创建自定义缓存实现提供基础的抽象类型。

  • 具体的内存中对象缓存实现。

抽象基缓存类 (ObjectCache) 定义以下缓存任务:

  • 创建和管理缓存条目。

  • 指定过期和逐出信息。

  • 触发响应缓存项更改而引发的事件。

MemoryCache 类是类的 ObjectCache 内存中对象缓存实现。 可以将 MemoryCache 该类用于大多数缓存任务。

注释

MemoryCache 类是基于在 System.Web.Caching 命名空间中定义的 ASP.NET 缓存对象建模的。 因此,内部缓存逻辑类似于早期版本的 ASP.NET 中提供的逻辑。

有关如何在 WPF 应用程序中缓存的示例,请参阅 演练:在 WPF 应用程序中缓存应用程序数据

ASP.NET 应用程序中的缓存

命名空间中的 System.Runtime.Caching 缓存类提供用于在 ASP.NET 中缓存数据的功能。

注释

如果应用程序面向 .NET Framework 3.5 或更早版本,则必须使用命名空间中 System.Web.Caching 定义的缓存类。 有关详细信息,请参阅 ASP.NET 缓存概述

注释

开发新应用程序时,建议使用该 MemoryCache 类。 命名空间 System.Runtime.Caching 中提供的 API 类似于命名空间 Cache 中提供的 API。 因此,如果在早期版本的 ASP.NET 中使用缓存,则 API 会很熟悉。 有关如何在 ASP.NET 应用程序中使用缓存的示例,请参阅 演练:在 ASP.NET 中缓存应用程序数据

输出缓存

若要手动缓存应用程序数据,可以使用 MemoryCache ASP.NET 中的类。 ASP.NET 还支持输出缓存,它将页面、控件和 HTTP 响应生成的输出存储在内存中。 可以在 ASP.NET 网页或使用 Web.config 文件中的设置以声明方式配置输出缓存。 有关详细信息,请参阅 outputCache 元素进行缓存(ASP.NET 设置架构)。

ASP.NET 允许通过创建自定义输出缓存提供程序来扩展输出缓存。 通过使用自定义提供程序,可以使用其他存储设备(例如磁盘、云存储和分布式缓存引擎)来存储缓存的内容。 若要创建自定义输出缓存提供程序,请创建派生自该类的 OutputCacheProvider 类,并将应用程序配置为使用自定义输出缓存提供程序。

WCF REST 服务中的缓存

对于 WCF REST 服务,.NET Framework 使你能够利用 ASP.NET 中提供的声明性输出缓存。 这样,便可以缓存 WCF REST 服务作的响应。 当用户向配置为缓存的服务发送 HTTP GET 请求时,ASP.NET 发送回缓存的响应,并且不会调用服务方法。 缓存过期后,用户下次发送 HTTP GET 请求时,将调用服务方法,并再次缓存响应。

.NET Framework 还允许实现条件 HTTP GET 缓存。 在 REST 方案中,服务通常使用条件 HTTP GET 请求来实现智能 HTTP 缓存,如 HTTP 规范中所述。 有关详细信息,请参阅 WCF Web HTTP 服务的缓存支持

在 .NET Framework 中扩展缓存

.NET Framework 中的缓存设计为可扩展。 通过 ObjectCache 该类,可以创建自定义缓存实现。 此类提供可用于所有托管应用程序(包括 Windows 窗体、Windows Presentation Foundation (WPF) 和 Windows Communications Foundation (WCF))的成员。 为此,可以创建使用其他存储机制的缓存类,或者想要对缓存作进行精细控制。

若要扩展缓存,可以执行以下作:

有关详细信息,请参阅 Scott Guthrie 博客上的 ASP.NET 4(VS 2010 和 .NET Framework 4.0 系列)的可扩展输出缓存 条目。

另请参阅