在asp.net中存儲共享對象的最佳方法是什麼?它會在每個請求中每次請求多次調用。我一直在使用這兩種方法,但我想知道是否有更好的方法。我每小時刷新一次這個對象。共享asp.net對象爲靜態或緩存
public static List<ResourceObject> SharedResources = new List<ResourceObject>()
//OR
public static List<ResourceObject> SharedResources
{
get
{
List<ResourceObject> _sharedResources = HttpContext.Current.Cache["RedirectRoutes"] as List<ResourceObject>;
if (_sharedResources == null)
{
_sharedResources = LoadNewSharedResource();
HttpContext.Current.Cache["RedirectRoutes"] = _sharedResources;
}
return _redirectRoutes;
}
set
{
HttpContext.Current.Cache["RedirectRoutes"] = value;
}
}
兩者看起來不夠合理,取決於您的確切需求。但請注意,如果有任何內容正在更改返回的'List'(添加/刪除元素等),那麼您可能會看到問題。你最好返回像'ReadOnlyCollection '這樣的東西來防止任何突變。 –
LukeH
我實際上通常忽略了'set'。所以,我認爲這可以防止這個問題。 – zeal
不,一個集合實際上是可以的,因爲引用賦值是保證原子的(在公共字段的情況下)並且ASP.NET'Cache'類保證是線程安全的(在屬性的情況下)。我在談論的是像'SharedResources.Add(/ * something * /)','SharedResources.RemoveAt(0)'等東西。這些可能在多線程環境中運行時失敗。 – LukeH