共有オブジェクトをasp.netに保存する最良の方法は何ですか?リクエストごとにリクエストごとに複数回呼び出されます。私はこれらの2つの方法を使用していましたが、IDはより良い方法があるかどうかを知りたいと思っています。私はこのオブジェクトを1時間に1回リフレッシュします。静的またはキャッシュとして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
私は実際には「セット」を通常は外しています。そう、私はこの問題を防ぐと思います。 – zeal
いいえ、リファレンスの割り当てはパブリックフィールドの場合はアトムで保証され、ASP.NETのCacheクラスはスレッドセーフであることが保証されているので(プロパティの場合)、セットは実際にはOKです。私が言っているのは 'SharedResources.Add(/ * something * /)'、 'SharedResources.RemoveAt(0)'などです。これらはマルチスレッド環境では実行時に失敗する可能性があります。 – LukeH