2011-05-30 52 views
1

我正在尝试为网站创建一种全局设置并将这些数据存储在数据库中,但是我一直认为这可能不是非常高效,因为这些设置必须被读取在每一个请求。ASP.NET网站的全局设置

设置的类型,例如“每页显示多少条记录”,启用/禁用事情,我打算将其存储在数据库中,但不希望在每次请求时都需要调用数据库的开销这些设置,特别是当它们没有改变时。毫无疑问,这一切都是在CMS的基础上完成的,你认为应该怎么做。我在想SqlCacheDependency,但从来没有设置过。有另一种方法吗?

另外在卡上可以存储这些设置在web.config上,并为它创建一个GUI,问题在于该站点的管理运行在它自己的命名空间上并且有它自己的web.config,所以这里的问题是,如果可以在应用程序名称空间外部操作web.config。

谢谢你们。

回答

1

我建议您从Application_Start的DB中读取值,并将这些值存储在Application object中。通过这种方式,您不需要每次都去数据库读取值。它只会在应用程序启动时读取和存储一次值。

void Application_Start(object sender, EventArgs e) 
{ 
    Application["name"] = ""; Value from DB 
    ...................... 
    ...................... 
} 

注:它不建议操作在web.config using UI值,因为一旦用户试图从用户界面,改变在web.config值修改任何价值,所有的用户会话将terminated

另一个注意事项:每次更改信息并更新数据库时,都需要更新应用程序级别对象。

+0

如果我在Application_Start上的应用程序对象上存储了某些内容,然后数据库发生更改,那么应用程序在重新启动后才会知道,是否正确? – 2011-05-30 11:13:55

+0

呀,但每次当您更改信息并更新您的数据库时,则需要更新应用程序级别对象。 – 2011-05-30 11:17:22

0

首先,我不会开始担心计数据库调用,除非您知道数据库调用实际上会影响性能。现代数据库很快,特别是针对精确设计的标量值查询。很多流行的软件包都会在每个请求中读取配置,并且它们似乎可以很好地扩展。

至于更新这些值,你可以很容易地从另一个应用程序更新web.config文件,假设你有正确的权限 - 这肯定会需要完全信任,从而遗漏了大多数托管方案。需要记住的是,虽然VS将文件视为特殊文件,但它只是一个XML文件,所以更新XML文件的常规技巧将适用。因为您是通过不同的应用程序执行此操作,所以它将起作用。但穆罕默德关于倾销用户会议的警告将适用于更新的“受害者”。取决于你正在改变什么,这可能是好的。

+0

谢谢。我不使用会话,并想知道如果更改web.config的appSettings会触发重新启动,我认为它可能但不确定。 – 2011-05-30 11:16:45

+0

它将重新启动应用程序池。根据发生的情况,这可能或不重要。 Session dump是这里用户可见的角度。 – 2011-05-30 11:19:45

+0

我可以对待网络。配置为任何XML文件,但我想使用适当的代码,如: [code] private bool UpdateAppSettings(string strKey,string strValue) { bool success = false; 配置objConfig = WebConfigurationManager.OpenWebConfiguration(“〜”); AppSettingsSection objAppsettings =(AppSettingsSection)objConfig.GetSection(“appSettings”);如果(objAppsettings!= null) objAppsettings.Settings [strKey] .Value = strValue; objConfig.Save(); success = true; } 返回成功; } [/ code] – 2011-05-30 11:21:16