我正在开发一个asp.net应用程序。在我的数据库中,我有一个“经典”单声道记录设置表。 每次我需要一个设置,我都会写一些这样的代码
if ReturnSetting("my_setting") = value then
'do something
else
'do others
end if
在'ReturnSetting'中打开连接,获取设置值并返回。 这效率不高(开放连接,datareader等)
我如何优化这个?
谢谢
答案 0 :(得分:1)
您可以编写变量并仅在第一个请求中填充它们。下一个请求将返回已填充的变量。
public static class Settings
{
internal static Dictionary<string, object> _settingsCache = new Dictionary<string, object>();
internal static Mutex _mutex = new Mutex();
public static object Get(string key)
{
_mutex.WaitOne();
if (_settingsCache[key] == null)
{
// add to the cache
_settingsCache.Add(key, NEW_DATA)
}
_mutex.ReleaseMutex();
return _settingsCache[key];
}
}
答案 1 :(得分:0)
我认为你可以在应用程序启动事件中编写对Global.asax文件的函数的调用,从数据库加载一次这个数据并将结果放在一个应用程序对象中并更新你的“ReturnSetting”函数来检查应用程序对象,这将优化您的代码,以便数据库调用完成一次。
N.B。如果这是全局网站设置,则此解决方案将有效工作,但如果是用户设置,则必须使用global.asax中的Session Start事件和会话来存储数据。