为什么使用IEnumerator的操作比循环遍历每个数组更快

时间:2014-07-26 07:25:25

标签: c# ienumerable

//示例程序以反向打印字符串,尝试两种方法。

class Program
{
    static void Main(string[] args)
    {
        //Message string used for reverse operation
        String messageText = " I am human trying to learn programming";
        String[] sep= {" "};

        //reversing the string using  split and accessing the array in reverse order
        string[] splitedString = messageText.Split(sep, StringSplitOptions.None);
        //used to measure the time taken by operation1
        DateTime timer = DateTime.Now;
        for (int index = 0; index < splitedString.Length; index++ )
        {
            Console.Write("{0} ", splitedString[index]);
        }

        Console.WriteLine("The time taken is {0}", (DateTime.Now - timer).TotalMilliseconds);

        //used to measure the time taken by operation2
        timer = DateTime.Now;

        //reversing the string using  in build reverse method  and later emumerating though each element using
        //for each
        IEnumerable<String> rev = splitedString.ToList<string>();
        foreach (string individualText in rev)
            Console.Write("{0} ",individualText);


        Console.WriteLine("The time taken is {0}", (DateTime.Now - timer).TotalMilliseconds);

        Console.ReadLine();

    }
}

//抱歉早期的代码在错误的地方有拆分功能。抱歉提交错误的代码 //只是想了解为什么IEnumerable更快。

1 个答案:

答案 0 :(得分:0)

几乎可以肯定,您正在看到CPU的缓存的影响:在开始时,数据和代码(包括框架代码)不会被缓存,作为第一个操作的一部分,它被复制到缓存中。因此,第一个操作的时间包括更慢的内存访问。

为了有效地计时微操作,您需要循环数千次迭代,并避免可能主导您想要的时间的潜在高开销操作(如IO)(IO可能比纯CPU操作花费多个数量级)

但是:这些类型的操作之间的差异极不可能是显着的:1。更多的程序工作,2。使其可维护,以及3.查看是否满足性能目标。只有当3的回答是&#34;否&#34;你是否开始描述和衡量事情进展缓慢的地方。