23

我正在编写一个 MVC webAPI,它将用于返回将绑定到下拉框或用作网站上的预先输入文本框结果的值,并且我想将值缓存在内存中,这样我就不需要执行数据库请求每次 API 被命中。

我将使用 MemoryCache 类,我知道当第一个请求进来时我可以填充缓存,但我不希望对 API 的第一个请求比其他请求慢。我的问题是:有没有办法让我在 WebAPI 首次启动时自动填充缓存?我看到有一个“App_Start”文件夹,也许我只是在这里扔了一些东西?

在初始填充之后,我可能会运行每小时/每天的请求以根据需要更新缓存。

内存缓存:http : //msdn.microsoft.com/en-us/library/system.runtime.caching.memorycache.aspx

UDPATE

Ela 在下面的回答成功了,基本上我只需要看看 Global.asax 的能力。感谢您在这里的快速帮助,这为我提出了一个关于不同缓存类型的优缺点的单独问题。

不同 ASP.NET 缓存选项的优缺点

4

1 回答 1

24

您可以使用 global.asax 应用程序启动方法来初始化资源。基本上将在应用程序范围内使用的资源。

以下链接应该可以帮助您找到更多信息: http ://www.asp.net/web-forms/tutorials/data-access/caching-data/caching-data-at-application-startup-cs

提示:如果您在进程中使用缓存(如果您在 Web 上下文/线程中缓存某些内容,通常就是这种情况),请记住您的 Web 应用程序是由 IIS 控制的。如果不需要处理任何用户请求,标准 IIS 配置将在 20 分钟后关闭您的 Web 应用程序。这意味着,您在内存中的任何资源都将被释放。

发生这种情况后,下次用户访问您的 Web 应用程序时,全局 asax,应用程序启动将再次执行,因为 IIS 重新初始化您的 Web 应用程序。如果您想防止这种行为,您可以将应用程序池空闲超时配置为在 20 分钟后不超时。或者您使用不同的缓存策略(持久缓存、分布式缓存...)。

要为此配置 IIS,您可以在此处找到更多信息: http ://brad.kingsleyblog.com/IIS7-Application-Pool-Idle-Time-out-Settings/

于 2013-09-21T21:11:14.873 回答