0

我有一个需要一定响应时间(不到 1 分钟)的 WCF 服务。

我的问题是每隔一段时间,最常见的是在早上,服务需要很长时间才能响应(有时超过 2 分钟)。

我认为这是因为该应用程序已回收并且第一次运行必须重新编译。

还有其他可能发生这种情况的原因吗?

是否可以关闭应用程序回收?如果是,那会导致任何副作用或不稳定吗?我假设将 asp.net 应用程序设置为回收是有原因的。

还有什么可以做的来提高首次运行的性能吗?

4

4 回答 4

2

是的,您可以阻止 AppPool 回收。另一种选择是创建一个保持活动状态的作业来不断地 ping 服务以防止工作进程休眠。

于 2009-04-17T18:43:36.033 回答
1

基本上,以下规则规定了应用程序何时被回收或卸载:

  1. 达到应用程序池回收时间后 - 默认情况下,我认为这是每 29 小时一次。
  2. 最后一次申请申请后的设定时间。

使用 keep-alive 来 ping 服务将解决 2,然后您只需要处理 1。

根据您的 IIS 版本,配置它的方法略有不同。

  1. 对于 IIS 6
  2. 对于 IIS 7

我认为空闲超时通常默认为“infinte”,但可以通过配置文件的processModel 元素(idleTimeout 属性)进行配置。

至于首次运行性能 - 不查看您的应用很难说,您是否在其上运行过DotTrace或其他分析器之类的东西?

您是否在第一次加载时进行了大量密集查找和缓存数据?这些可以延期吗?

于 2009-04-17T20:52:16.643 回答
0

性能问题可能是由您没有首先排除的任何原因引起的。既然你没有排除任何事情,它可能是由任何事情引起的。

于 2009-04-17T18:44:51.800 回答
0

也许是一个愚蠢的想法:您是否可以安排一个控制台应用程序在早上 5:30 访问您的服务,这样该请求将需要很长时间才能运行,并且您的普通用户在那之后进入不会有这个问题?

当然 - 它没有解决根本原因,但就目前而言,它可能是一个有用的解决方法 - 不是吗?

马克

于 2009-04-17T20:30:32.517 回答