循环如何变得更有效率

时间:2015-10-14 12:59:30

标签: loops for-loop memory-management

您好我遇到了以下代码作为对stackoverflow问题的回复。以下是与该问题没有直接联系的答案,但它似乎提高了代码的效率。

for (int i = 0; i < nodeList.getLength(); i++)
     

更改为

for (int i = 0, len = nodeList.getLength(); i < len; i++)
     

更有效率。第二种方式可能是最好的,因为它倾向于   使用更平坦,可预测的记忆模型。

我读到了关于平面内存模型但我无法明白这一点。即,它以何种方式使代码更有效。有人可以解释一下。

参考:https://stackoverflow.com/a/12736268/3320657

2 个答案:

答案 0 :(得分:0)

每次程序循环时都不会调用nodeList.getLength(),而是调用一次,存储在整数len中,然后将i与len进行比较,而不是运行nodeList.getLength()。

答案 1 :(得分:0)

  

平面内存模型或线性内存模型是指内存寻址范例,其中&#34;内存在程序中显示为单个连续的地址空间。&#34; CPU可以直接(并线性)寻址所有可用的内存位置,而无需采用任何类型的内存分段或分页方案。

记住这一点,计算机一次声明一行内存。当在行本身内声明变量时,它会在寻找值时产生较小的压力。

_footer = _htmlDocument.DocumentNode.SelectSingleNode("//tfoot/tr/th[@class='first']/td[1]");

return _footer.First().InnerText;

更有效率
for (int i = 0, len = nodeList.getLength(); i < len; i++)