我可以将所有全局应用程序设置存储在Global.asax文件中的Application Variable中

时间:2015-07-21 08:52:29

标签: c# asp.net asp.net-mvc

我正在开发一个存在性能问题的Web应用程序。我正努力为此付出最大努力。我做了很多改变,这也改善了我的表现。我有一个问题:

  • 我可以将所有AppSettings值保存在Application_Start事件中的Global.asax文件中吗?下面是我的Global.asax文件代码:

    void Application_Start(object sender, EventArgs e)
    {
        // Code that runs on application startup
        // Setting all the common application level variables.
        Application["ConnectionString"] = ConfigurationManager.ConnectionStrings["UtilityServiceMISConstr"].ConnectionString;
        Application["SendErrorMail"] = ConfigurationManager.AppSettings["SendErrorMail"];
        Application["SendErrorMailTo"] = ConfigurationManager.AppSettings["SendErrorMailTo"];
        Application["LOGINURL"] = ConfigurationManager.AppSettings["LOGINURL"];
        Application["ExpirePasswordDays"] = ConfigurationManager.AppSettings["ExpirePasswordDays"];
        Application["FromMailID"] = ConfigurationManager.AppSettings["FromMailID"];
        Application["BCCMailID"] = ConfigurationManager.AppSettings["BCCMailID"];
        Application["CCMailID"] = ConfigurationManager.AppSettings["CCMailID"];
        Application["IsSPLogging"] = ConfigurationManager.AppSettings["IsSPLogging"];
        Application["DefaultReminderCount"] = ConfigurationManager.AppSettings["DefaultReminderCount"];
        Application["PageSize"] = ConfigurationManager.AppSettings["PageSize"];
        Application["SendSettlementMail"] = ConfigurationManager.AppSettings["SendSettlementMail"];
        Application["SendSettlementMailTo"] = ConfigurationManager.AppSettings["SendSettlementMailTo"];
        Application["Settlement"] = ConfigurationManager.AppSettings["Settlement"];
        Application["AllowedLoginAttempts"] = ConfigurationManager.AppSettings["AllowedLoginAttempts"];
    }
    
    void Application_End(object sender, EventArgs e)
    {
        //  Code that runs on application shutdown
    }
    
    void Application_Error(object sender, EventArgs e)
    {
        // Code that runs when an unhandled error occurs
    
    }
    
    void Session_Start(object sender, EventArgs e)
    {
        // Code that runs when a new session is started
    
    }
    
    void Session_End(object sender, EventArgs e)
    {
        // Code that runs when a session ends. 
        // Note: The Session_End event is raised only when the sessionstate mode
        // is set to InProc in the Web.config file. If session mode is set to StateServer 
        // or SQLServer, the event is not raised.
    }
    

这是一个好习惯吗?如果没有,那么最好的方法是存储我的连接字符串吗?

2 个答案:

答案 0 :(得分:1)

  

最近我接受了采访。在那里我被问到一个问题,即存储连接字符串的最佳方式,而不是一次又一次地读取web.config文件..?

面试官不知道所有事情,无论他们声称拥有什么资历。您的应用程序配置将被读取once, on application startup,因此每次调用时,ConfigurationManager.AppSettings[]索引器都不会转到配置文件。

所以不,使用你显示的代码没有任何改进。

答案 1 :(得分:1)

配置 - 最佳实践

不,您的瓶颈不存在,并且在Web.Config内保留连接字符串等配置元素,您可以更改应用程序的配置,而无需重新编译或搞乱任何其他内容。

将连接字符串存储在Web.Config中还有其他好处,因为您可以加密整个连接字符串而不是以纯文本格式存储...它为您的应用程序添加了另一层安全性

效果

性能问题可能由多种因素引起......这里是一些最常见的罪魁祸首:

  • 前端

    • 您可能有太多脚本相互干扰,或者只是占用浏览器资源。如果是这种情况,请使用浏览器调试工具查找根本原因。
    • 不利用外部资源的捆绑和缩小意味着浏览器额外往返加载您的网站......

      • 如果您有7个或8个JavaScript文件,这些文件没有缩小或捆绑在一起,您的浏览器将不得不逐个请求这些文件,您会惊讶于它会对您的影响有多大应用程序加载时间。
    • 不利用脚本,CSS和图像的缓存是另一个,确保缓存静态内容。

  • 后端

    • 如果您以非异步方式拨打长时间运行的任务,那么纠正这一点非常重要。对您的站点发出的每个请求都由IIS线程处理,async允许IIS将请求移交给另一个线程,以便它可以为其他尝试连接到您网站的客户端提供服务。
    • 复杂且缓慢的LINQ查询。
    • 通过param缓存内容。

列表继续,而不是担心启动时发生了什么,尝试分析您的应用程序,看看哪些电话花了太长时间才完成。