C# - 为什么此循环的第一次迭代比其余循环运行得慢?

标签 c# caching runtime benchmarking

我正在做一些基准测试来测试一些东西。我有一个包含 1 亿个 64 位整数的大数组,我随机选择其中的 1000 万个并进行一些操作。索引是随机选择的,因为我试图尽可能阻止 CPU 进行缓存,同时仍然获得准确的基准测试。循环的第一次迭代大约需要 0.3 秒,所有其他迭代只需要 0.2 秒。我唯一的猜测是,cone[] 的部分内容仍在缓存中,但我认为对于该大小的数组,它无法存储这么多。还有其他想法吗?

也许是 JIT 问题?

static void Main(string[] args)
    {

        Int64[] cone = new Int64[100000001];

        for (int m = 0; m < 20; ++m)
        {
            int[] num2 = new int[10000001];
            Random rand = new Random();

            for (int i = 0; i < 10000000; ++i)
            {
                num2[i] = rand.Next(100000000);
            }

            DateTime start = DateTime.Now;

            for (int i = 0; i < 10000000; ++i)
            {
                cone[num2[i]] = i;
                if (cone[i] > 0) ++cone[i];

            }

            DateTime finish = DateTime.Now;
            TimeSpan elapsed = finish - start;

            Console.WriteLine("Took: {0}", elapsed);
            Thread.Sleep(100);
        }
        Console.ReadLine();
    }

最佳答案

可能代码是在您第一次进入循环时被即时编译的。编译时间是什么让它变慢的?我运行了你的代码的 C++ 版本,它似乎每次迭代都有大约相同的延迟。

关于C# - 为什么此循环的第一次迭代比其余循环运行得慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5958668/

相关文章:

c# - Windows.Form 不触发 keyDown 事件

c# - 如何在 XNA 3.1 中导出模型的 3D "screenshot"?

Http 缓存 - style.css?123 或 style_123.css?

java - 在本地机器上运行 ignite

java - 将 neo4j 与 jdk 1.7 一起使用时出错

c# - 在 .NET 中是否有更快的递归扫描目录的方法?

c# - 更新 XML 文件

python - 为 json 创建一个可以显式清除的缓存

Java——在UNIX环境下执行命令

java - 使用Java runtime.exec函数删除临时文件