【问题标题】:How to keep my ASP.NET app always "alive", and if its a bad idea, why shouldn't I do it?如何让我的 ASP.NET 应用程序始终“活着”,如果这是一个坏主意,我为什么不这样做呢?
【发布时间】:2009-05-03 18:15:40
【问题描述】:

我最近在我闪亮的新 VPS 上部署了一个 ASP.NET 应用程序,虽然我对 VPS 可以提供共享托管解决方案的总体性能提升感到满意,但我对我的启动时间不满意申请。

当我的客户第一次点击它时,我的 Web 应用程序需要相当长的时间才能启动。我没有在调试模式下运行它(在我的 web.config 中禁用它),并且它在启动时没有任何实际工作要做 - 我的应用程序启动事件处理程序中没有代码,我没有启动任何多余的线程,什么都没有。我的客户第一次点击我的应用程序需要 15-20 秒才能做出响应。后续调用需要 1-2 秒,除非我等待几分钟让我的应用程序关闭。然后又回到 15-20 秒的启动时间。

(我知道我的计时基准非常不科学,这些数字应该只是让我了解我的应用启动时的性能)。

我对 ASP.NET 的理解是 IIS(在本例中为 7.0),它会在第一次运行 Web 应用程序时对其进行编译,然后缓存这些二进制文件,直到 Web 应用程序发生更改。我的理解有误吗?

那么,在这本书般大小的序言之后,我的问题如下:

  • 是不是我对ASP.NET编译的理解有误?它实际上是如何工作的?
  • 有什么方法可以强制 IIS 缓存我的二进制文件,或者让我的应用程序无限期地保持活动状态?
  • 如果在我之前的问题中做任何一件事情都是一个坏主意,为什么这是一个坏主意,我可以做些什么来提高启动性能?

谢谢!

编辑:看来我的问题与this question 略有重复(我认为我在这里找到了答案,哈哈)。但是,我认为我的问题更全面,如果没有将其作为副本关闭,我将不胜感激,除非这里有更好的、已经提出的问题来解决这个问题。

【问题讨论】:

  • 我将建议与其他类似问题的回答者建议的完全相同的方法。您确定该问题的答案不能满足您的需求吗?我认为他们很好地解释了这种情况。
  • @DOK,感谢您的反馈,就我的问题的“如何”而言,另一个问题很好,但我认为我的问题涵盖了更多“为什么”和此问题的最佳实践.
  • 我认为 SO 上使用的搜索算法非常糟糕——因此出现了重复。

标签: asp.net performance iis-7


【解决方案1】:

IIS 还会在给定时间段后关闭您的 Web 应用,具体取决于其配置。我不太熟悉 IIS7 以及在哪里配置它,所以你可能想对如何配置它做一些研究 (starting point?)。

不好吗?取决于你的代码有多好。如果您没有泄漏内存或资源,则可能不会。

另一个解决方案是precompile your website。这可能是您更好的选择。但是,您必须检查并查看它,因为它可能会带来不利影响,具体取决于您与网站的交互方式。

【讨论】:

  • 如上所述,您需要在 IIS 中设置“空闲超时”,以确保应用程序不会过早从内存中删除(我相信默认为 20 分钟)。这是除了预编译之外,最大值由应用程序池回收时间加上它自己的上限。应用程序池>[正在使用的池]>高级设置>空闲超时
【解决方案2】:

我对 ASP.NET 的理解是 IIS(在本例中为 7.0)在第一次运行 Web 应用程序时对其进行编译,然后缓存这些二进制文件,直到 Web 应用程序发生更改。我的理解有误吗?

没错。具体来说,程序集被构建为卷影副本(不要与卷快照服务/卷影副本功能混淆)。这使您可以在不影响现有运行会话的情况下即时替换文件夹中的代码。 ASP.NET 将检测到更改,并将新版本编译到目标目录(通常为Temporary ASP.NET Files)。有关该过程的更多信息:Understanding ASP.NET Dynamic Compilation

【讨论】:

    【解决方案3】:

    如果纯粹是编译时间,那么通常最有效的方法是在回收后自己访问网站。定期拨打电话,以确保收到 15 秒延迟的是您,而不是您的客户。

    如果这是所有编译时间(取决于硬件),我会感到惊讶 - 你有很多静态类实例吗?他们在创业方面做了大量工作吗?

    无论是跟踪还是分析,您都可以很快找出启动时间花费在哪里。

    至于为什么保留一个进程是一个坏主意,我相信这是由于清理。无论我们如何处理数据或 GC 的表现如何,通过重新启动该过程可以进行良好的清理。诸如碎片化之类的事情可能会消失,并且随着时间的推移而积累的任何其他资源问题都会被清除。因此,让服务器进程无限期地运行是一个非常糟糕的主意。

    【讨论】:

      猜你喜欢
      • 2011-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-19
      • 2013-09-07
      • 2021-04-21
      • 1970-01-01
      相关资源
      最近更新 更多