for 循环性能比较 提高for循环的效率

昨天在csdn上看到这样的帖子:http://topic.youkuaiyun.com/u/20090316/11/feb21d98-ef52-422c-a3eb-2de211963533.html?seed=1379459908

for(int i=1,n=tempUser.length;i <n;i++)与
for(int i=1,;i <tempUser.length;i++)相比较,性能有较大的区别吗,有必要采取这种写法吗,
习惯for(int i=1,;i <tempUser.length;i++),而且并没有发现两者的性能有较大差别,

我当即就测试了一下,发现果然性能比较起来差别很小,甚至后者更高效一点。

虽然得出这样的结果,但和自己心里想的确完全相反的。所有当然就回复说差不多。

今天又发现一位前辈的blog中正好有对这个帖子的回应。他做了测试,内容大致是前面的帖子的问题应该是差不多的,但是他又更深入的进行测试,得出:在有情况for(int i=0;i<a.b.c.length;i++)的情况的时候,使用for(int i=0,n=a.b.c.length;i<n;i++)更加高效。

所有我也做了一下测试:

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保存到了内存或一个比内存更块的地方,而多级就没有这么幸运了。
我们都知道for(int i=0;i<a.length;i++)语句,i=0是运行一次,而i<a.length和i++是每次循环都要做的工作。所有应该尽量将访问变量耗时间的操作放在第一个;号前。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值