为什么使用IEnumerator的操作比遍历每个数组要快?

本文关键字:数组 遍历 IEnumerator 操作 为什么 | 更新日期: 2023-09-27 18:14:50

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

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();
    }
}

//抱歉,之前的代码将split函数放在了错误的位置。很抱歉提交了错误的代码//只是想理解为什么IEnumerable更快

为什么使用IEnumerator的操作比遍历每个数组要快?

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

为了有效地计算微操作的时间,您需要循环数千次迭代,并避免潜在的高开销操作(如IO),这些操作可能会占用您想要的时间(IO可能比纯CPU操作长许多个数量级)。

但是:这两种类型的操作之间的差异极不可能是显著的:更多的程序工作,2。使其易于维护;看看是否达到了绩效目标。只有当3的答案是"否"时,你才可以开始分析和衡量事情进展缓慢的地方。