c# - WebAPI 首次调用服务缓慢

标签 c# performance asp.net-web-api

我遇到了 WCF 问题和启动速度慢的问题,因此我将所有代码切换为使用 WebAPI。虽然启动时间已大幅减少(约 8-15 秒降至约 2 秒),但启动时仍然有奇怪的延迟。目前约为 2 秒,但后续调用始终低于 0.5 秒,直到发生超时。

我检查了所有应用程序池设置,以确保没有任何启动延迟或空闲超时设置。

我找到了这个链接Very slow first call to web service这对我没有帮助 - 我在冷启动时仍然遇到相同的速度问题。还找到了这个First call to web service each day is slow再次似乎不适用于我。

我在 WebAPI 服务上启用了跟踪,发现第一次和第二次调用之间的唯一区别是显示 WebHostHttpControllerTypeResolver.GetControllerTypes 的两行。我似乎找不到太多关于此的信息,但这是我能看到的唯一区别。

是否有任何其他类型的日志记录可以用来确定实际发生的情况?

最佳答案


这是我在该问题下的对话摘要


Well the timeouts are never the same, but the same ballpark...to expand, i publish the server - first call is ~2 seconds - subsequent calls are ~0.5 seconds. After maybe 20 minutes (hard to determine the actual time) the same occurs - ~2 then ~0.5.

20 分钟 - 这是默认的AppPool 空闲超时(分钟)。因此,听起来 IIS 会卸载您的应用程序池,以便下次您在 20 分钟后点击它时,它会“再次加载所有内容”(不确定是否会重新编译),因此会出现延迟。您可以将其设置为 0 以禁用超时(注意后果)或只是将其设置为更大的值。

如果您禁用超时,您可能需要考虑添加计划任务,以便在使用率较低时(例如凌晨 1:00 或适合您需要的时间)回收您的应用程序池。

WCF 注释

I was having issues with WCF and slow startup times

这也是我的经验(使用 IIS 托管的 WCF),就像我上面提到的那样,只是禁用了我的 WCF 服务的应用程序池的超时。这让它们保持美好和温暖。此外,当我知道我的系统不会被用来允许 IIS 执行一些内务处理时,我每天都会进行一次回收事件。

对于 IIS 而言,托管在 IIS 中的 WCF 只是另一个 IIS 应用程序。 :)

关于c# - WebAPI 首次调用服务缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36056536/

相关文章:

c# - 找不到类型或命名空间名称 'ManagementEventWatcher'

c# - 将 IHttpContextAcessor 注入(inject)到 Controller 操作内的绑定(bind)模型中

wpf - WPF 能否在性能敏感的环境中渲染包含 300,000 个点的线条路径?

asp.net-mvc-4 - WebAPI OData 5.0 Beta - 访问 GlobalConfiguration 引发安全错误

c# - Web API 服务在读取流时挂起

c# - 使用 LDAP 获取用户的所有组

c# - WPF DataBinding 未使用 INotifyPropertyChanged 进行更新

performance - Azure 表存储分区单独性能

sql-server - 获取 "set statistics io on"导致 t-sql 进行调优

asp.net - 尝试添加映射文件时ASP.NET脚手架出现问题