我正在编写一个MVC webAPI,它将用于返回将绑定到下拉框的值或在网站上用作提前输入文本框结果的值,我想在内存中缓存值,这样我就不需要每次命中API时都会执行数据库请求。
我将使用MemoryCache类,我知道我可以在第一个请求进入时填充缓存但我不希望API的第一个请求比其他请求慢。我的问题是:当WebAPI首次启动时,我有办法自动填充缓存吗?我看到有一个“App_Start”文件夹,也许我只是在这里扔东西?
在初始填充之后,我可能会按小时/每日运行请求以根据需要更新缓存。
的MemoryCache: http://msdn.microsoft.com/en-us/library/system.runtime.caching.memorycache.aspx
UDPATE
Ela在下面的回答就是诀窍,基本上我只需要看看Global.asax的能力。 感谢您的快速帮助,这为我提出了一个单独的问题,关于不同缓存类型的优缺点。
答案 0 :(得分:22)
您可以使用global.asax appplication start方法初始化资源。 基本上将在应用程序中使用的资源。
以下链接可帮助您查找更多信息: 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/