为什么第一次迭代比剩余的迭代运行得慢?

时间:2015-11-03 21:53:34

标签: c# visual-studio-2012 jit

我使用的是Visual Studio 2012,64位四核Windows 7操作系统,.Net framework 4.5.2。

Project是在Release模式下运行的控制台应用程序; JIT已禁用。

在C ++环境中,第一次迭代没有减速。在C#环境中,存在大幅减速。在其他类似的帖子中有人建议这是由于Jitting。但是,在通过工具 - >选项 - >调试 - >禁用JIT后,即时(并取消选中JIT复选框) - 没有可观察到的加速。以下是您可以自己尝试的示例。任何人都可以向我解释如何成为"完全编译"在执行申请之前?这是一个低迭代过程,我需要所有迭代才能快速执行。

 private static void Main(string[] args)
        {
            int counter = 10;
            while (counter != 0)
            {
                DoArray();
                counter--;
            }
        }

        public static void DoArray()
        {
            var stopwatch = new Stopwatch();
            int[] set = {0, 1, 9, 10, 11};
            int[] toRemove = {1, 14, 27, 40};
            stopwatch.Start();
            int[] removed = RemoveElementsFromSet(set, toRemove);
            stopwatch.Stop();
            if (removed.Length != 4)
                throw new ApplicationException("ERROR");
            Console.WriteLine("elapsed[ticks]: {0}", stopwatch.ElapsedTicks);
        }

        internal static int[] RemoveElementsFromSet(int[] set, int[] toRemove)
        {
            var removed = new int[set.Length];
            int removedIndex = 0;
            for (int i = 0; i < set.Length; i++)
            {
                if (toRemove.Contains(i))
                    continue;

                removed[removedIndex] = set[i];
                removedIndex++;
            }
            Array.Resize(ref removed, removedIndex);
            return removed;
        }
    }
elapsed[ticks]: 6651
elapsed[ticks]: 7
elapsed[ticks]: 6
elapsed[ticks]: 6
elapsed[ticks]: 5
elapsed[ticks]: 5
elapsed[ticks]: 6
elapsed[ticks]: 5
elapsed[ticks]: 3
elapsed[ticks]: 2
Press any key to continue . . .

0 个答案:

没有答案