for 循環(huán)性能比較 提高for循環(huán)的效率
for(int i=1,;i <tempUser.length;i++)相比較,性能有較大的區(qū)別嗎,有必要采取這種寫法嗎,
習(xí)慣for(int i=1,;i <tempUser.length;i++),而且并沒有發(fā)現(xiàn)兩者的性能有較大差別,
我當(dāng)即就測試了一下,發(fā)現(xiàn)果然性能比較起來差別很小,甚至后者更高效一點(diǎn)。
雖然得出這樣的結(jié)果,但和自己心里想的確完全相反的。所有當(dāng)然就回復(fù)說差不多。
今天又發(fā)現(xiàn)一位前輩的blog中正好有對這個帖子的回應(yīng)。他做了測試,內(nèi)容大致是前面的帖子的問題應(yīng)該是差不多的,但是他又更深入的進(jìn)行測試,得出:在有情況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();
}
}

其中數(shù)據(jù)量越大,類越大,差別越明顯。
結(jié)論:影響應(yīng)該在,變量在每次循環(huán)都要訪問下一級變量的原因。如果只是簡單的a.length可能編譯器對這樣的循環(huán)操作有優(yōu)化,將a.length保存到了內(nèi)存或一個比內(nèi)存更塊的地方,而多級就沒有這么幸運(yùn)了。
我們都知道for(int i=0;i<a.length;i++)語句,i=0是運(yùn)行一次,而i<a.length和i++是每次循環(huán)都要做的工作。所有應(yīng)該盡量將訪問變量耗時間的操作放在第一個;號前。
相關(guān)文章
Underscore之Array_動力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要為大家詳細(xì)介紹了Underscore之Array的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-07-07擴(kuò)展Bootstrap Tooltip插件使其可交互的方法
這篇文章主要介紹了擴(kuò)展Bootstrap Tooltip插件使其可交互的方法,結(jié)合實(shí)例形式分析了bootstrap擴(kuò)展tooltip插件的原理與具體操作技巧,需要的朋友可以參考下2016-11-11Javascript實(shí)現(xiàn)基本運(yùn)算器
這篇文章主要為大家詳細(xì)介紹了Javascript實(shí)現(xiàn)基本運(yùn)算器的相關(guān)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-07-07JavaScript設(shè)計模式之職責(zé)鏈模式應(yīng)用示例
這篇文章主要介紹了JavaScript設(shè)計模式之職責(zé)鏈模式,結(jié)合實(shí)例形式分析了javascript責(zé)任鏈模式的概念、原理、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下2018-08-08原生javascript單例模式的應(yīng)用實(shí)例分析
這篇文章主要介紹了原生javascript單例模式的應(yīng)用,結(jié)合實(shí)例形式分析了JavaScript單例模式的基本功能、原理、應(yīng)用及操作注意事項(xiàng),需要的朋友可以參考下2020-02-02js實(shí)現(xiàn)addClass,removeClass,hasClass的函數(shù)代碼
js實(shí)現(xiàn)addClass,removeClass,hasClass的函數(shù)代碼,需要的朋友可以參考下。2011-07-07