ほら、私はMVC4プロジェクトとしてウェブサイトを開発しています。このサイトでは、非常に簡単な方法でデータベースにさまざまな設定を照会することがよくあります。
private static T GetSetting<T>(string parameterName)
{
return (T)Convert.ChangeType(/* bla bla SQL query code */, typeof(T));
}
論理的な質問は次のようになります-設定を取得するたびにデータベースを検索しているのは一体何ですか?そして、あなたがいくつかのサイクルなどでそれを必要とする場合はどうなりますfor
か?
だから私はキャッシングソリューションを思いつき、私ができる限り最善を尽くしたかどうかを知る必要があります。どう思いますか?
internal static void ClearCache()
{
foreach (IDictionary cache in _caches)
cache.Clear();
}
private static readonly HashSet<IDictionary> _caches = new HashSet<IDictionary>();
private static class TypedCache<T>
{
private static readonly Dictionary<string, T> _cache = new Dictionary<string, T>();
internal static Dictionary<string, T> Cache { get { return _cache; } }
}
private static T GetSetting<T>(string parameterName)
{
T value;
if (!TypedCache<T>.Cache.TryGetValue(parameterName, out value))
{
_caches.Add(TypedCache<T>.Cache);
TypedCache<T>.Cache[parameterName] = value =
(T)Convert.ChangeType(/* bla bla SQL query code */, typeof(T));
}
return value;
}
IISが(複数のIISプロセスを使用して)メモリ内にDLLの複数のコピーを作成できると聞きました。ちなみに、どうすれば彼に1つだけを使用させることができますか?そのため、私のアイデア全体が地獄に落ちる可能性があります。