我有一个需要一定响应时间(不到 1 分钟)的 WCF 服务。
我的问题是每隔一段时间,最常见的是在早上,服务需要很长时间才能响应(有时超过 2 分钟)。
我认为这是因为该应用程序已回收并且第一次运行必须重新编译。
还有其他可能发生这种情况的原因吗?
是否可以关闭应用程序回收?如果是,那会导致任何副作用或不稳定吗?我假设将 asp.net 应用程序设置为回收是有原因的。
还有什么可以做的来提高首次运行的性能吗?
我有一个需要一定响应时间(不到 1 分钟)的 WCF 服务。
我的问题是每隔一段时间,最常见的是在早上,服务需要很长时间才能响应(有时超过 2 分钟)。
我认为这是因为该应用程序已回收并且第一次运行必须重新编译。
还有其他可能发生这种情况的原因吗?
是否可以关闭应用程序回收?如果是,那会导致任何副作用或不稳定吗?我假设将 asp.net 应用程序设置为回收是有原因的。
还有什么可以做的来提高首次运行的性能吗?
是的,您可以阻止 AppPool 回收。另一种选择是创建一个保持活动状态的作业来不断地 ping 服务以防止工作进程休眠。
基本上,以下规则规定了应用程序何时被回收或卸载:
使用 keep-alive 来 ping 服务将解决 2,然后您只需要处理 1。
根据您的 IIS 版本,配置它的方法略有不同。
我认为空闲超时通常默认为“infinte”,但可以通过配置文件的processModel 元素(idleTimeout 属性)进行配置。
至于首次运行性能 - 不查看您的应用很难说,您是否在其上运行过DotTrace或其他分析器之类的东西?
您是否在第一次加载时进行了大量密集查找和缓存数据?这些可以延期吗?
性能问题可能是由您没有首先排除的任何原因引起的。既然你没有排除任何事情,它可能是由任何事情引起的。
也许是一个愚蠢的想法:您是否可以安排一个控制台应用程序在早上 5:30 访问您的服务,这样该请求将需要很长时间才能运行,并且您的普通用户在那之后进入不会有这个问题?
当然 - 它没有解决根本原因,但就目前而言,它可能是一个有用的解决方法 - 不是吗?
马克