有几个问题可以解决这个问题,但没有涵盖我的确切问题,所以我们开始吧。
对于站点设置,如果这些存储在数据库中,您是否:
- 每次有人提出请求时从数据库中检索它们
- 登录时将它们存储在会话变量中
- ??????
对于用户特定的设置,我是否与站点设置一样?
任何指导/最佳实践将不胜感激。
干杯
我建议创建一个模块来检索可以以任何一种方式实现的首选项,然后对于您的第一个实现,每次都访问数据库,因为这样更容易。如果您有性能问题,请向模块添加缓存以减少数据库流量。
我更喜欢 Glomek 建议的方法……在 WebCache 中缓存设置将大大提高访问速度。考虑以下:
#region Data Access
private string GetSettingsFromDb(string settingName)
{
return "";
}
private Dictionary<string,string> GetSettingsFromDb()
{
return new Dictionary<string, string>();
}
#endregion
private const string KEY_SETTING1 = "Setting1";
public string Setting1
{
get
{
if (Cache.Get(KEY_SETTING1) != null)
return Cache.Get(KEY_SETTING1).ToString();
Setting1 = GetSettingsFromDb(KEY_SETTING1);
return Setting1;
}
set
{
Cache.Remove(KEY_SETTING1);
Cache.Insert(KEY_SETTING1, value, null, Cache.NoAbsoluteExpiration, TimeSpan.FromHours(2));
}
}
private Cache Cache { get { return HttpContext.Current.Cache; } }
您将获得动态加载的好处,在 2 小时不使用后将项目从缓存中扔出的内存保护,以及修改设置时需要的刷新和重新加载。
通常我会将站点设置放在 web.config 文件中,除非您正在构建一个具有多个站点并且经常被应用程序本身更改的应用程序,否则通常将其放在数据库中通常没有意义。
对于用户特定的设置,我会考虑从默认的 asp.net 配置文件提供程序开始,它将设置存储在数据库中并管理每个请求一次用户设置的检索并将更新保存到最后以最小化数据库调用的数量. 一旦您开始遇到性能问题,您可以考虑扩展配置文件提供程序以用于缓存和/或您的特定需求。