【问题标题】:Can i store all my global application settings in Application Variable inside Global.asax file我可以将所有全局应用程序设置存储在 Global.asax 文件中的应用程序变量中吗
【发布时间】:2015-07-21 08:52:29
【问题描述】:

我正在开发一个存在性能问题的 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.
    }
    

这是一个好习惯吗?如果不是,那么存储连接字符串的最佳方式是什么?

【问题讨论】:

  • 是什么让你认为读取配置信息是当前的性能瓶颈?
  • 最近去面试了。有人问我一个问题,即存储连接字符串而不是一次又一次地读取 web.config 文件的最佳方法是什么..?所以我想将我的连接字符串存储在 Application_Start 事件中。
  • 但是您没有将连接字符串存储在Application_Start 中,而是从那里读取它并且连接字符串仍在您的app.config
  • 那么存储连接字符串的最佳方式在哪里?
  • 大多数初学者更喜欢猜测什么是慢而不是分析应用程序。这只会导致错误的解决方案。

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


【解决方案1】:

最近我去面试了。有人问我一个问题,存储连接字符串而不是一次又一次地读取 web.config 文件的最佳方法是什么..?

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

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

【讨论】:

  • 好的。忘记表演了。但是将我的应用设置放在上面代码中提到的 Global.asax 文件中是否有效?
  • 当然可以。
  • 好的,谢谢 CodeCaster..:)
  • 仅当您对 application_start 方法的调用方式以及您将如何使用这些值感到满意时才有效。也许您需要阅读 application_start 方法,看看它是否适合您正在尝试做的事情。
  • 在我的 Web 应用程序中放置太多应用程序变量,这会影响我的性能吗..?
【解决方案2】:

配置 - 最佳实践

不,您的瓶颈不存在,在Web.Config 中保留诸如连接字符串之类的配置元素可以让您更改应用程序的配置,而无需重新编译或弄乱其他任何东西。

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


性能

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

  • 前端

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

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

  • 后端

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

列表继续,不要担心启动时发生的事情,尝试分析您的应用程序并查看哪些调用需要很长时间才能完成。

【讨论】:

  • 好的,谢谢 Aydin Adn..:)
  • 欢迎您,如果您不明白答案的任何部分,请告诉我,以便我为您澄清。
  • 感谢 Aydin Adn。我很欣赏你的回答。以下是我在最近的采访中提出的问题:假设在开始我的网站时有 200 个用户,然后突然变成了 20,000 个用户。我将如何提高我的表现并尽快做出回应?
  • 当面试官问这样的问题时,回击并分解他们期望的答案类型,这个问题有基础设施方面,也有开发方面。
  • 变量太多了,如果有人问我这个问题,我会问我们提供什么内容,我们从哪里提供服务,我们的访问者来自哪里,高峰时间是什么......如果你不知道问题,那么你就无法解决它。我会使用他们对这些问题的回答在 Azure 上设置云环境,然后配置扩展,但这只是解决方案的开始,而不是完整的解决方案......
猜你喜欢
  • 2012-03-13
  • 2020-05-19
  • 1970-01-01
  • 1970-01-01
  • 2019-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多