我有一个本地托管的 WCF 服务,它公开了一个返回您传递给它的字符串值的基本方法。
我还有一个单元测试,我尝试调用服务 10000 次,并监控调用完成所需的时间。
我的 using 语句在我的测试中的位置至关重要,如果放置不正确会产生很大的不同,但是我不明白为什么会发生这种情况。
示例 1:(35 秒)
[TestMethod]
public void TestGetDataOutsideUsing()
{
const int count = 10000;
var operations = new List<int>();
for (var i = 0; i < count; i++)
operations.Add(i);
using (var proxy = new BasicHttpServiceClient())
{
var timer = Stopwatch.StartNew();
System.Threading.Tasks.Parallel.ForEach(operations, x => { proxy.GetData(x.ToString(CultureInfo.InvariantCulture)); });
timer.Stop();
Console.WriteLine("{0:###0.0000000} ms", timer.ElapsedMilliseconds);
Console.WriteLine("{0:###0.0000000} per millisecond", (count / (decimal)timer.ElapsedMilliseconds));
Console.WriteLine("{0:###0.0000000} per second", (count / ((decimal)timer.ElapsedMilliseconds / 1000)));
Console.WriteLine("{0:###0.0000000} per minute", (count / ((decimal)timer.ElapsedMilliseconds / 1000 / 60)));
}
}
示例 2:(6.2 秒)
[TestMethod]
public void TestGetDataInsideUsing()
{
const int count = 10000;
var operations = new List<int>();
for (var i = 0; i < count; i++)
operations.Add(i);
var timer = Stopwatch.StartNew();
System.Threading.Tasks.Parallel.ForEach(operations, x =>
{
using (var proxy = new BasicHttpServiceClient())
{
proxy.GetData(x.ToString(CultureInfo.InvariantCulture));
}
});
timer.Stop();
Console.WriteLine("{0:###0.0000000} ms", timer.ElapsedMilliseconds);
Console.WriteLine("{0:###0.0000000} per millisecond", (count / (decimal)timer.ElapsedMilliseconds));
Console.WriteLine("{0:###0.0000000} per second", (count / ((decimal)timer.ElapsedMilliseconds / 1000)));
Console.WriteLine("{0:###0.0000000} per minute", (count / ((decimal)timer.ElapsedMilliseconds / 1000 / 60)));
}
第一个示例和第二个示例之间的唯一区别是 using 语句的位置。我原以为在 ForEach 中使用 using 语句会花费更长的时间,但事实证明并非如此。
为什么会这样,上面的哪个例子是测试这个的准确方法?我可能以错误的方式进行此测试吗?
我想做的就是对我的服务进行 10000 次并发调用,看看需要多长时间。