ASP.NET WebAPI和IIS中的请求计时不一致

Nik*_*tov 15 sql-server iis performance asp.net-web-api angularjs

问题

我正在测试我们的一个AngularJS + ASP.NET WebAPI应用程序的性能.我观察到的奇怪之处在于,在Fiddler 中执行完全相同的查询并使用不同的时序.

不仅在服务器上而且在我的本地计算机中也观察到此行为.

细节

该应用程序使用Chrome进行测试,并使用ASP.NET WebAPI(Microsoft.AspNet.WebApi version 5.2.2)编写Angular JS version 1.3.8.

服务器是带有SQL Server 2008和IIS 7.5的Windows Server 2008 R2.

我的本地计算机是带有Visual Studio 2013和SQL Server 2014的Windows 8.1.

我注意到完全相同的查询是根据Fiddler以不同的时序执行的(蓝色的查询是相同的,而白色的查询是完全相同的查询的另一种类型):

提琴手要求

例如,查询号26的详细时间是:

Request Count:   1
Bytes Sent:      583        (headers:517; body:66)
Bytes Received:  3,844      (headers:260; body:3,584)

ACTUAL PERFORMANCE
--------------
ClientConnected:    17:26:25.099
ClientBeginRequest: 17:27:26.544
GotRequestHeaders:  17:27:26.544
ClientDoneRequest:  17:27:26.544
Determine Gateway:  0ms
DNS Lookup:         0ms
TCP/IP Connect: 0ms
HTTPS Handshake:    0ms
ServerConnected:    17:26:25.102
FiddlerBeginRequest:    17:27:26.544
ServerGotRequest:   17:27:26.544
ServerBeginResponse:    17:27:26.554
GotResponseHeaders: 17:27:26.554
ServerDoneResponse: 17:27:26.554
ClientBeginResponse:    17:27:26.554
ClientDoneResponse: 17:27:26.554

    Overall Elapsed:    0:00:00.010
Run Code Online (Sandbox Code Playgroud)

查询号28的详细时间是:

Request Count:   1
Bytes Sent:      583        (headers:517; body:66)
Bytes Received:  3,844      (headers:260; body:3,584)

ACTUAL PERFORMANCE
--------------
ClientConnected:    17:26:25.099
ClientBeginRequest: 17:27:29.104
GotRequestHeaders:  17:27:29.104
ClientDoneRequest:  17:27:29.104
Determine Gateway:  0ms
DNS Lookup:         0ms
TCP/IP Connect: 0ms
HTTPS Handshake:    0ms
ServerConnected:    17:26:25.102
FiddlerBeginRequest:    17:27:29.104
ServerGotRequest:   17:27:29.104
ServerBeginResponse:    17:27:29.616
GotResponseHeaders: 17:27:29.616
ServerDoneResponse: 17:27:29.616
ClientBeginResponse:    17:27:29.616
ClientDoneResponse: 17:27:29.616

    Overall Elapsed:    0:00:00.512
Run Code Online (Sandbox Code Playgroud)

正如我所说,它们是完全相同的查询(相同的标题,相同的数据等).

在查询26之后1-2秒执行查询28.

问题

这种行为的主要原因是什么?我应该在哪里搜索问题?奇怪的是,查询首先是快速然后慢,然后再快,等等.我没有理由认为问题与数据缓存有关.

如何精确测试服务器上的时间,找到这个0.0100.512秒之间的差异?差异超过50倍.

sir*_*cco 2

这不是一个角度问题,但我将如何解决此问题:

  1. 使用类似此chrome 扩展的 REST API 客户端向您的端点发出请求。(您也可以使用类似的东西: http: //jmeter.apache.org/,但设置起来更复杂)
  2. 运行 20 次并节省时间。
  3. 清空数据库并仅填充此请求所需的表 - 只需几行数据。
  4. 运行该工具 20 次 - 存储次数。它们一致吗?如果此时它们不一致,我会将代码视为罪魁祸首。

    • 您正在呼叫任何外部服务吗?
    • 除了执行查询之外,服务在加载数据时是否还执行其他操作?
    • 使用像 dotTrace 这样的分析器来查看什么花费了比应有的时间更多的时间。(实际上你应该从一开始就使用它)
  5. 如果时间仍然一致,则在数据库中加载更多数据,直到时间开始不一致。然后分析查询并开始优化它们。

现在,根据时间的不一致,我会假设该服务在加载该数据时会执行其他操作:外部服务调用..某事。