当前位置: 首页 > 图文教程 > 网络编程 > Javascript > for 循环性能比较 提高for循环的效率

Javascript
清华大学出版的事半功倍系列 javascript全部源代码
一个不错的渐隐文字效果
JavaScript多线程的实现方法
广告代码静态化js通用函数
“增强js程序代码的健壮性”之我见大量示例代码
国外JavaScript经典封装集合整理
Highslide JS
一个漂亮的下拉列表,去掉了灰色倒三角按钮
Add a Picture to a Microsoft Word Document
Javascript注入技巧
用JS实现HTML标签替换效果
发布BlueShow v1.0 图片浏览器(类似lightbox)blueshow.js 打包下载
模拟弹出菜单的代码
收藏Javascript中常用的55个经典技巧
Track Image Loading效果代码分析
js小技巧--自动隐藏红叉叉
JavaScript延时效果比较不错的
非常酷的js图形渐隐导航菜单栏
科讯商业版中用到的ajax空间与分页函数
js实现的修改div里img标签的src属性

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-12   浏览: 99 ::
收藏到网摘: n/a

性能有较大的区别吗,有必要采取这种写法吗 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++是每次循环都要做的工作。所有应该尽量将访问变量耗时间的操作放在第一个;号前。