5

ほら、私は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つだけを使用させることができますか?そのため、私のアイデア全体が地獄に落ちる可能性があります。

4

2 に答える 2

5

System.Web.Cachingこの回答で説明されている方法で使用しないでください。

于 2012-08-02T08:08:24.673 に答える
0

値のタイプを変更Convertする場合にのみ使用してください。文字列を数値に、またはその逆に変換します。あなたの場合、値はすでに正しいタイプを持っているので(私は推測します)、キャストする必要があります。

タイプごとに個別の辞書は必要ありません。これは何も購入しません。単一のを使用し、 (ではなく)をTにDictionary<string, object>キャストします。ConvertGetSetting<T>

于 2012-08-02T08:03:25.113 に答える