2011-03-15 47 views
1

我通過HttpContext.Application存儲了一個保存我的應用程序參考數據的大型結構,該變量通過HttpContext.Application訪問。每過一段時間,這些數據都需要改變。當我更新它時,傳入的請求是否會有數據處於不一致狀態的危險?是否有需要(和方法)來鎖定某些或全部這種結構?最後,除了在每次需要此數據庫(大多是靜態數據)時查詢數據庫以外,是否還有其他解決此問題的方法?在ASP.Net(MVC)中修改應用程序變量

回答

1

還有其他的解決方案可用,有許多緩存提供商,您可以使用。

首先,有HttpRuntime.Cache(它與HttpContext緩存相同)。還有.NET 4中的System.Runtime.Caching.MemoryCache。

您可以爲緩存中的數據設置數據過期和其他規則。

http://wiki.asp.net/page.aspx/655/caching-in-aspnet/

http://msdn.microsoft.com/en-us/library/6hbbsfk6.aspx

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

更高級高速緩存包括分佈式緩存。

通常,它們駐留在另一臺服務器上,但也可能駐留在同一臺服務器上的不同進程上。 這樣的提供者是AppFabric(來自Microsoft)和MemCached以及我目前無法回想的其他人。

的AppFabric:http://msdn.microsoft.com/en-us/magazine/ff714581.aspx

的memcached:http://memcached.org/

0

您可能正在查找HttpContext.Items,而是將數據存儲在請求範圍而不是應用程序範圍中。查看this article可以很好地瞭解ASP.NET中不同的上下文作用域。

爲避免查詢數據庫「主要是靜態數據」,您的解決方案是利用ASP.NET's caching

1

您不會看到處於不一致狀態的應用程序變量。

HttpApplicationState的MSDN頁說(根據線程安全部分):

此類型是線程安全的。