2013-09-21 20 views
22

Açılır kutulara bağlı veya bir web sitesinde ileri metin kutusu sonuçları olarak kullanılacak değerleri döndürmek için kullanılacak bir MVC webAPI yazıyorum ve değerleri önbelleğe almak istiyorum bellekte her zaman API vurulduğunda veritabanı istekleri gerçekleştirmek gerekmez.Uygulama verilerini bellekte önbelleğe alma: MVC Web API'si

MemoryCache sınıfını kullanacağım ve ilk istek geldiğinde önbelleği doldurabileceğimi biliyorum, ancak API'nın ilk isteğinin diğerlerinden daha yavaş olmasını istemiyorum. Sorum şu: WebAPI ilk başladığında önbelleği otomatik olarak doldurmanın bir yolu var mı? Bir "App_Start" klasörü olduğunu görüyorum, belki sadece buraya bir şey atıyorum

İlk popülasyondan sonra, önbelleği gerektiği gibi güncellemek için muhtemelen bir saatlik/günlük istekte bulunacağım.

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

udpate

Ela cevabı aşağıda temelde sadece Global.asax yeteneklerine bakmak için gerekli hile yaptı. Buradaki hızlı yardım için teşekkürler, bu, farklı önbelleğe alma türlerinin artıları/eksileri hakkında benim için ayrı bir soru ortaya koydu.

Pros/Cons of different ASP.NET Caching Options

cevap

22

Sen kaynak başlatmak için global.asax appplication başlangıç ​​yöntemini kullanabilirsiniz. Temelde uygulama genişliğinde kullanılacak kaynaklar.

Daha fazla bilgi bulmak için yardımcı olmalıdır aşağıdaki linki: http://www.asp.net/web-forms/tutorials/data-access/caching-data/caching-data-at-application-startup-cs

İpucu: (web bağlam/iplik içinde bir şey önbelleğe eğer genellikle olduğu) işlem önbelleğe alma içinde kullanırsanız , tutmak Web uygulamanızın IIS tarafından kontrol edildiğini unutmayın. Standart IIS yapılandırması, kullanıcı isteklerinin sunulmaması durumunda, web uygulamanızı 20 dakika sonra kapatır. Bu, bellekte sahip olduğunuz tüm kaynakların serbest kalacağı anlamına gelir.

Bu işlemden sonra, bir kullanıcı web uygulamanıza eriştiğinde, global asax, uygulama başlangıcı yeniden başlatılır, çünkü IIS web uygulamanızı yeniden başlatır. Bu davranışı önlemek istiyorsanız, uygulama havuzu boşta kalma zaman aşımını, 20 dakika sonra zaman aşımına uğramayacak şekilde yapılandırabilirsiniz. Ya da farklı bir önbellek stratejisi kullanıyorsunuz (kalıcı önbellek, dağıtılmış önbellek ...).

burada daha fazla bilgi bulabilirsiniz, bunun için IIS yapılandırmak için: http://brad.kingsleyblog.com/IIS7-Application-Pool-Idle-Time-out-Settings/

+0

tekrar teşekkürler yanıt için! Ekstra bilgiyi takdir ediyorum, sorduğum yeni soruda sahip olabileceğiniz ek önbellek bilgilerini yayınlamaktan çekinmeyin (buradaki asıl soruya link). IIS çalışan zaman aşımlarını – vesuvious

+0

hesabına almam gerekecek ya da sitenize her 15 dakikada bir ping attığı bir "kalp atışı" servisi ayarlayabilirsiniz. Bunu yapmak için BinaryCanary.com'u (ücretsiz) kullanıyorum çünkü bulut-barındırma hizmetim, planımı yükseltmedikçe 20 dakikadan daha fazla bir süre için idle_timeout'u değiştirmeyecek. – ganders

İlgili konular