gpt4 book ai didi

c# - 单元测试中using语句的性能影响

转载 作者:行者123 更新时间:2023-11-30 14:34:04 25 4
gpt4 key购买 nike

我有一个本地托管的 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 次并发调用,看看需要多长时间。

最佳答案

在第一个例子中,有一个Proxy对象;在第二个示例中,有多个 Proxy 对象。

我认为这与using 语句没有直接联系,而是与它的使用方式有关。在第一个示例中,Proxy 对象成为并行操作的瓶颈。

关于c# - 单元测试中using语句的性能影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14706568/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com