看,我正在开发一个网站作为 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 可以在内存中创建多个我的 DLL 副本(通过使用多个 IIS 进程)。顺便说一句,我怎么能强迫他只使用一个?正因为如此,我的想法可能会落入地狱。