在webforms asp.net应用程序中使用config.web中的appSettings比在App_Code中使用const更快/更快?

Mat*_*ers 2 .net c# asp.net web-config

我想知道访问我的全局变量的最快方法......它们只会在beta测试阶段发生变化.在我们上线之前.从那时起,他们永远不会改变.

我认为从web.config获取内容的开销也很简单,编写App.HostUrl代替ConfigurationManager.AppSettings ["HostUrl"].ToString()

app.cs

public class App {
    public const string HostUrl = "http://www.{domain}.co.uk";
    public const string iHostUrl = "http://img.{domain}.co.uk";
}
Run Code Online (Sandbox Code Playgroud)

要么

web.config中

<appSettings>
<add key="HostUrl" value="http://www.{domain}.co.uk" />
<add key="iHostUrl" value="http://img.{domain}.co.uk" />
<appSettings>
Run Code Online (Sandbox Code Playgroud)

Wel*_*bog 5

无论如何,Web应用程序都会解析Web.config,因此实际上没有与之相关的额外开销.无论是否有appsetting,文件仍然打开,读取和解析.

你应该在你的应用程序,而不是东西它可以不必担心真正的性能瓶颈,一旦启动时.如果不将设置存储在web.config中,则无法显着提升性能.


Kel*_*tex 5

const会更快,但这限制了我们的部署选项.作为替代方案,为什么不创建静态变量并将appsetting放在Application_Start中(在global.asax中).

public class App {
    public static string HostUrl;
    public static string iHostUrl;
}
Run Code Online (Sandbox Code Playgroud)

在Global.asax.cs中:

void Application_Start(object sender, EventArgs e)
{
    App.HostUrl = ConfigurationManager.AppSettings["HostUrl"].ToString();
    App.iHostUrl = ConfigurationManager.AppSettings["iHostUrl"].ToString();
}
Run Code Online (Sandbox Code Playgroud)


Jes*_*ber 5

我使用带有常量的类来实现真正恒定的事物(即查找表中值的主键永不改变).您的示例中的内容看起来可能实际上在测试环境和生产环境之间发生变化,这正是我认为有意义的东西放入某种类型的.config文件中.然后,这些文件可以保存在源控制/配置管理系统中,以用于您部署的每个环境.

至于必须要做'ConfigurationManager.AppSettings ["HostUri"]'的丑陋,你总是可以将它们包含在app_code或外部库中的类中的getter的静态属性中,这样你就可以说'App.HostUrl'.

就性能而言,我很确定配置中的值在应用程序初始化时和/或第一次从配置系统中调用值时缓存在内存中,因此性能差异可能相当微不足道.