for 循环性能比较 提高for循环的效率 在编程中,for 循环是非常常用的一个循环结构,但是,有些开发者可能会忽视for 循环的性能问题。在本文中,我们将讨论for 循环性能比较和提高for 循环的效率。 让我们看一下两个不同的for 循环写法: ```csharp for(int i=1,n=tempUser.length;i <n;i++) ``` 和 ```csharp for(int i=1;i <tempUser.length;i++) ``` 乍看之下,两者的写法貌似没有什么区别,但是,实际上,第二种写法中的`tempUser.length`将在每次循环中被访问一次,而这将会对性能产生影响。 在一些情况下,使用`for(int i=0,n=a.b.c.length;i<n;i++)`这种写法可以提高性能。为什么呢?因为在每次循环中,`a.b.c.length`将被访问一次,而如果我们将其赋值给一个局部变量`n`,那么在每次循环中,只需访问这个局部变量,而不需要访问`a.b.c.length`。这将减少了性能开销。 我们可以通过测试来证明这一点。下面是一个简单的测试程序: ```csharp class Program { static void Main(string[] args) { string s; s = Console.ReadLine(); while(s != "0") { Person p = new Person(10000000); Console.WriteLine("for(int i=0;i<lenArray.length;i++)"); Console.WriteLine("Starting..."); long l1 = DateTime.Now.Ticks; for(int i = 0; i < p.Child.Alias.Length; i++) { //Console.Write(lenArray[i]); } long l2 = DateTime.Now.Ticks; Console.WriteLine("Ending.\nTime is : " + (l2 - l1).ToString()); Console.WriteLine("for(int i=0,n=lenArray.length;i<n;i++)"); Console.WriteLine("Starting..."); long l3 = DateTime.Now.Ticks; for(int i = 0, n = p.Child.Alias.Length; i < n; i++) { //Console.Write(lenArray[i]); } long l4 = DateTime.Now.Ticks; Console.WriteLine("Ending.\nTime is : " + (l4 - l3).ToString()); s = Console.ReadLine(); } Console.Read(); } } ``` 测试结果表明,在大数据量的情况下,第二种写法的性能要高于第一种写法。 结论是,影响的原因在于变量在每次循环中都要访问下一级变量的原因。如果只是简单的影响应该在变量在每次循环都要访问下一级变量的原因。如果只是简单的a.length可能编译器对这样的循环操作有优化,将化,将a.length保存到了内存或一个比内存更块的地方,而多级就没有这么幸运了。 因此,在编程中,我们应该尽量将访问变量耗时间的操作放在第一个;号前,以提高性能。
- 粉丝: 7
- 资源: 878
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助