在我的WebApi(.Net 4.6.2)中,我遇到一个问题,该呼叫执行异常慢(〜15秒)。当我去分析它时,我发现调用内的代码执行得相对较快(db调用和处理时间不到200ms)并将响应发送回客户端。
我认为序列化(我正在使用JSON)需要一段时间。因此,我在要序列化的类的GetObjectData()
方法中添加了一个断点。而且它也可以在几毫秒内完成工作。
在那之后,如果我让它运行,它仍然需要剩余时间(大约14秒)来完成。(这是纯粹的在客户端等待的时间,没有下载发生)
如何调试GetObjectData()
之后发生的情况并确定瓶颈?
答案 0 :(得分:1)
我建议安装提琴手,并按照here的说明检查那里的clientBeginRequest和clientEndRequest值。
如果您的Web API使用HTTP,则可以启用Fiddler上启用的HTTPS拦截。
您可以看到如下所示的计时器:
然后,您可以确定速度慢是在服务器端还是在客户端应用程序中。
您还可以尝试通过邮递员调用您的API,并检查响应在邮递员中出现需要多少时间。
如果问题出在服务器端,则可以添加日志记录筛选器或HttpModules来查看何时接收到请求,何时发送响应以及每种方法的执行花费了多少时间。您还应该检查服务器CPU使用率和内存/磁盘使用率,以查看它们是否导致API性能出现问题。
希望这应该有助于定位问题。