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

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

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

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

是否可以关闭应用程序回收?如果是的话,会导致任何副作用或不稳定吗?我假设 ASP.NET 应用程序设置为回收肯定有一个原因。

是否还可以采取其他措施来提高首次运行性能?

有帮助吗?

解决方案

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

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

使用保持活动状态来 ping 服务可以解决 2,然后您只需处理 1。

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

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

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

至于首次运行性能 - 在不查看您的应用程序的情况下很难说,您是否运行过类似的东西 点追踪 或者另一个分析器?

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

其他提示

是可以防止程序池,从回收。另一种选择是创建一个保活工作不断ping该服务,以保持工作进程进入睡眠状态。

性能问题都可以通过你还没有排除任何第一次引起。既然你没有任何排除,它可以被任何东西cauased。

也许一个愚蠢的想法:你可以安排一个控制台应用程序在例如打你服务上午5:30在早上,所以该请求将需要很长的时间来运行,而你的普通用户进来以后不会再有这样的问题?

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

马克

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top