【问题标题】:High responsetime from Web API after 5 min inactivity5 分钟不活动后来自 Web API 的高响应时间
【发布时间】:2014-10-28 20:36:18
【问题描述】:

我在试生产环境中有一个奇怪的问题。

我有一个网站,它对托管在另一台服务器上的 Web Api 执行一些操作。

通常需要不到一秒的时间来发出特定的发布请求,但在 5 分钟不活动后,相同的发布请求将需要 10-30 秒。 (根据谷歌浏览器网络标签)

提到的发布请求不是执行的请求列表中的第一个请求。

请求是使用 Ajax 完成的。

我已经运行 SQL 分析器来查看数据库查询是否运行缓慢,但这些查询都运行良好,而且看起来 POST 请求只是延迟返回。

你们知道为什么会这样吗?

【问题讨论】:

  • 我假设您指的是响应时间?该请求应该发送得相当快。很可能是您的 Web API 存在问题,可能与身份验证/缓存有关。不了解系统很难说。

标签: javascript c# sql asp.net-web-api


【解决方案1】:

一个很可能的原因是在数据库级别进行编译。第一次使用大多数数据库引擎运行查询时,必须编译 sql 并制定执行计划。然后将其缓存一段时间。当它不再被缓存时,它必须再次完成。你的sql字符串越长,编译的时间就越长。

解决方案是使用存储过程。一旦它运行一次,它就保持编译状态,并且执行计划总是可用的。

【讨论】:

  • 感谢丹的回复。但是,当我查看分析器时,似乎所有数据库查询都已运行,然后在 10-30 秒内没有任何反应。
【解决方案2】:

问题解决了!

问题是在请求中使用 SMTPClient 发送了一封电子邮件。

在 Web 应用程序中,smtp 客户端不是异步的,因此它必须在 POST 请求返回之前发送。

在这个问题中使用 TheCodeKing 的回复使其异步: How do I avoid a delay when sending email from my application?

解决了问题!

【讨论】:

    猜你喜欢
    • 2014-12-23
    • 1970-01-01
    • 2011-08-04
    • 1970-01-01
    • 2017-10-29
    • 1970-01-01
    • 1970-01-01
    • 2017-12-25
    • 1970-01-01
    相关资源
    最近更新 更多