c# - 第一轮和第二轮速度差

标签 c# performance benchmarking

当我对代码进行基准测试时,我注意到第一次运行太慢,而接下来的运行太快。原因是什么?

for (int i = 0; i < 10; i++)
{
    var timer = new Stopwatch();
    timer.Start();
    var expression = new Expression('x');
    Console.WriteLine(timer.ElapsedTicks);
}

结果

15096
6
0
1
1
1
1
1
0

有没有办法即使在第一次运行时也能始终获得最大速度?

最佳答案

您正在测量抖动开销。恰到好处。对于Expression来说,这主要是磁盘开销,它的ngen-ed代码需要从System.Core.ni.dll文件加载到RAM中。或者换句话说,您正在测量硬页面错误的成本。它将驻留一段时间,这就是为什么它在您第二次及随后调用其构造函数时速度很快。

不,您始终必须支付这笔费用。

关于c# - 第一轮和第二轮速度差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29879271/

相关文章:

svnserve VS mod_dav_svn

javascript - Node.js 未定义 VS 空字符串内存使用

c# - LinqToSql 预编译查询有什么好处?

c# - 超链接上的 EnableViewState 的作用或含义是什么?

c# - 用于从一组数字中确定所有可能的和的非递归算法

c# - 如何在 C# 中访问 Dictionary<TKey, TValue>.Item 属性

线性时间不同值的最大子数组的算法

java - 静态变量的内存范围

asp.net-mvc-3 - 从 EF 迁移到 Fluent NHibernate : Memory Leaks, 架构

ruby - 对返回值的 ruby​​ 操作进行基准测试