我正忙着通过加载并行、同时调用来对我们的公共 API 进行性能测试。代码如下。
int batchSize = 10;
ParallelOptions parallelOptions = new ParallelOptions();
parallelOptions.MaxDegreeOfParallelism = batchSize;
Parallel.For(0, batchSize, parallelOptions, j =>
{
Debug.WriteLine("Thread began at " + DateTime.Now.ToLongTimeString());
using (WebClient client = new WebClient())
{
Stopwatch sw = Stopwatch.StartNew();
byte[] arr = client.DownloadData("http://myapiurl/webservice.svc");
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds.ToString());
}
});
但我得到了奇怪的结果:
从调试输出中,我可以看到所有线程都在完全相同的时间启动(如预期的那样)。
我还记录了从 Web 服务中处理 API 调用所花费的时间(这存储在日志表中)。每个电话大约需要相同的时间……大约 2.5 秒。
但现在控制台输出不相关。我希望它只比网络服务记录的时间长一点。输出:
2883 2914 5653 5822 8000 8250 10215 10539 11622 12494
我可以提出以下可能的原因:
就好像
WebClient.DownloadData
在自己的实例中排队我的请求一样。IIS 正在排队我的网络请求。这是不可能的,因为没有其他东西可以访问 API。