【发布时间】:2013-10-01 01:28:53
【问题描述】:
我正忙于通过并行、同时调用加载公共 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 正在排队我的 Web 请求。这是不可能的,因为 API 没有其他任何东西。
【问题讨论】:
标签: c# .net performance task-parallel-library performance-testing