0

这将是我之前提出的问题的后续问题: 秒表不同的时间为什么?

我在 Web 服务中使用秒表,只知道需要一些方法的时间我有这样的程序:(C# 中的程序,使用 ASP.NET)

Stopwatch swK=new Stopwatch();
swK.Start();
do
{               
method1(intvar1,intvar2,intvar3);
var_1=method2(intvar1,doublevar1, doublevar2);
flag= Compara (doublevar3,intvar1,doublevar4);
}
while (flag != 1);
swK.Stop();
double tim2 = swK.Elapsed.TotalMilliseconds;

这样 tim2 将以毫秒为单位从“while”中的所有方法中获取时间;我不明白的是,第一次它仍然需要很多时间,例如第一次需要 10 毫秒,下一次只需要 1毫秒,

所以我的问题是,如果我只是在测量某些方法的过程时间,那么第一次需要这么多时间吗?是因为程序集、jiiter 等...

他们是另一种衡量我的方法的方法,但没有受到其他因素的影响?

4

2 回答 2

3

在 .NET 中,有很多事情第一次需要一段时间,而后续操作会更快。连接到数据库、连接到 Web 服务、附加到文件系统等。甚至可能是发生 JIT 编译的问题,尤其是在您更改代码并重新运行它时。甚至只是运行时如何分配和释放对象

作为 .NET 开发人员,您甚至不需要考虑幕后的大量“管道”。还有像连接池这样的优化,可以在您甚至没有意识到的情况下加快后续尝试的速度。

正如您的问题所表达的那样,它可能是任何这些类型的东西。我们不一定能在这里明确地回答这个问题。我们不知道这些方法内部发生了什么,但希望以上内容能够阐明导致这种情况的原因。

Toi 缩小范围,在 Visual Studio 中(如果你有正确的版本)你可以使用分析来尝试找到瓶颈。

于 2012-10-29T19:14:00.660 回答
0

第一次运行它需要很长时间的最可能原因是即时编译。对于 Web 服务,造成这种情况的另一个原因是网络延迟。通常,衡量一个过程所花费的时间的最佳方法是通过做几个测量(比如说 10 个)并获得它们的平均值,还有其他统计方法,但这取决于你想要获得的复杂程度这个措施。

于 2012-10-29T19:18:10.910 回答