ASP.NET应用程序变量vs从ConfigurationSettings.AppSettings读取

ASP.NET应用程序变量vs从ConfigurationSettings.AppSettings读取,.net,asp.net,performance,global-asax,.net,Asp.net,Performance,Global Asax,有一个类似的问题张贴在,但我的略有不同,我不相信那里的答案 因此,如果我在global.asax中定义一个应用程序变量,如下所示: public class Global : System.Web.HttpApplication { public static readonly string X = ConfigurationSettings.AppSettings["XsltExternal"]; // rest of the code here } 这个读取操作不应该

有一个类似的问题张贴在,但我的略有不同,我不相信那里的答案

因此,如果我在global.asax中定义一个应用程序变量,如下所示:

public class Global : System.Web.HttpApplication
{    
   public static readonly string X =  ConfigurationSettings.AppSettings["XsltExternal"];
   // rest of the code here
}
这个读取操作不应该吗

string Y = Global.X;
快于

string Y = ConfigurationSettings.AppSettings["XsltExternal"];
因为避免了哈希表查找(假定ASP.Net就是这样存储web.config设置的)?我的应用程序使用了大量的配置设置,并在整个页面周期中对其进行检查,所以我希望能够利用我可以保存的每一个ms

有人吗


PS:我最初的简单测试页面ANTS profiler测试显示读取时间从0.017毫秒下降到0.002毫秒。

我会说是的,它更快,但我会尽可能保持全局类的干净。在我的实现中,我通常将所有配置项放在具有静态构造函数的单独类上,例如:

public class Constants
{
    public static string PayPalSeller;
    public static string PayPalUrl;
    public static string PayPalPDTKey;
    public static string RpxTokenUrl;
    public static string VirtualAppFolder;
    static Constants()
    { 
        PayPalSeller = ConfigurationManager.AppSettings["PayPalSeller"];
        PayPalUrl = ConfigurationManager.AppSettings["PayPalUrl"];
        PayPalPDTKey = ConfigurationManager.AppSettings["PayPalPDTKey"];
        RpxTokenUrl = ConfigurationManager.AppSettings["RpxTokenUrl"];
    }
 }
要使用它,您当然会:

Constants.PayPalSeller
希望这有帮助,
-covo

是的,我只是想和其他人确认一下,在我去转换那些数不清的代码行之前,我是否有什么没有考虑过的。lol:-)维护一个结构化配置类来处理最常见的设置也会容易得多。您确实应该只从结构化配置类内部直接调用AppSettings。@Frazell,因此您建议从全局创建这个新类的静态对象,而不是像NS.Global.VARNAME那样单独访问这些变量。是的,有道理。我面临的唯一问题是,在多项目解决方案中,我无法访问全局类,也无法从其他支持项目中添加对主项目的引用,因为它会产生循环依赖性问题。正在努力!为了澄清,在这种情况下,最好将类本身设置为静态。