我正在尝试提高桌面应用程序的性能,该应用程序向REST服务发出1000个HTTP POST请求。根据Fiddler的说法,服务器会在40-50毫秒内始终响应每个请求。但是,无论我使用WebClient还是HttpClient来发出请求,以及我是否使用同步或异步方法来执行此操作,每隔3或4次调用神秘地需要额外50-100 ms返回。剩下的方法调用相对于网络时序只需要额外1-2毫秒。
10个连续请求的典型时间(以毫秒为单位)如下所示:
Network Method call Difference
======== ============ ===========
54 167 113 - ??
43 141 97 - ??
42 43 1
42 43 1
40 106 62 - ??
44 44 0
41 41 0
44 115 71 - ??
41 41 0
38 39 1
您可以在此Fiddler时间轴中看到延迟差距:
这是同步WebClient版本:
var wc = new WebClient();
wc.BaseAddress = m_endpoint.AbsoluteUri;
// ...add authentication and content headers...
var sw = Stopwatch.StartNew();
var responseStr = wc.UploadString(pathAndQuery, "POST", bodyStr);
sw.Stop();
Debug.Print("HTTP request: {0} ms", sw.ElapsedMilliseconds);
这是异步WebClient版本:
var sw = Stopwatch.StartNew();
var responseStr = await wc.UploadStringTaskAsync(pathAndQuery, "POST", bodyStr);
sw.Stop();
HttpClient版本几乎相同:
m_client = new HttpClient();
m_client.BaseAddress = m_endpoint;
// ...add authentication and content headers...
var content = new StringContent(bodyStr, Encoding.UTF8, "application/json");
var sw = Stopwatch.StartNew();
var response = await m_client.PostAsync(pathAndQuery, content, cancelToken)
.ConfigureAwait(false);
var responseStr = await response.Content.ReadAsStringAsync();
sw.Stop();
Debug.Print("HTTP request: {0} ms", sw.ElapsedMilliseconds);
所有这些实现都会出现此问题。我的本地计算机空闲,并且一次发送一个请求(不是并发)。
有人能指出可能导致这些神秘延迟的原因吗?
提前致谢!