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
查询号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
正如我所说,它们是完全相同的查询(相同的标题,相同的数据等).
在查询26之后1-2秒执行查询28.
这种行为的主要原因是什么?我应该在哪里搜索问题?奇怪的是,查询首先是快速然后慢,然后再快,等等.我没有理由认为问题与数据缓存有关.
如何精确测试服务器上的时间,找到这个0.010和0.512秒之间的差异?差异超过50倍.
这不是一个角度问题,但我将如何解决此问题:
运行该工具 20 次 - 存储次数。它们一致吗?如果此时它们不一致,我会将代码视为罪魁祸首。
如果时间仍然一致,则在数据库中加载更多数据,直到时间开始不一致。然后分析查询并开始优化它们。
现在,根据时间的不一致,我会假设该服务在加载该数据时会执行其他操作:外部服务调用..某事。