//示例程序以反向打印字符串,尝试两种方法。
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更快。
答案 0 :(得分:0)
几乎可以肯定,您正在看到CPU的缓存的影响:在开始时,数据和代码(包括框架代码)不会被缓存,作为第一个操作的一部分,它被复制到缓存中。因此,第一个操作的时间包括更慢的内存访问。
为了有效地计时微操作,您需要循环数千次迭代,并避免可能主导您想要的时间的潜在高开销操作(如IO)(IO可能比纯CPU操作花费多个数量级)
但是:这些类型的操作之间的差异极不可能是显着的:1。更多的程序工作,2。使其可维护,以及3.查看是否满足性能目标。只有当3的回答是&#34;否&#34;你是否开始描述和衡量事情进展缓慢的地方。