如何保持我的ASP.NET应用程序始终"活着",如果它是一个坏主意,为什么我不应该这样做?

Rob*_*Rob 8 asp.net performance iis-7

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

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

(我知道我的计时基准是非常不科学的,这些数字应该只是给我的应用程序启动时的性能感觉).

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

所以,在那本书大小的序言之后,这是我的问题:

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

谢谢!

编辑:看来我的问题是这个问题的轻微重复(我认为我在这里找到了更好的答案,哈哈).但是,我认为我的问题更为全面,如果没有作为副本关闭,我会很感激,除非在这里有更好的,已经问过的问题来解决这个问题.

小智 4

IIS 还会在给定时间段后关闭您的 Web 应用程序,具体取决于其配置。我不太熟悉 IIS7 以及在哪里配置它,因此您可能需要对如何配置它进行一些研究(起点?)。

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

另一个解决方案是预编译您的网站。这可能是您更好的选择。但是,您必须检查一下并查看,因为它可能会带来缺点,具体取决于您与网站的交互方式。

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