在一段程序中,过多的循环很大程度的给服务器施压。但是我们却离不开循环,我们唯一能做的就是最大程度的对其进行优化。
.net对于循环似乎也有特殊的处理,在对某个数组或者集合进行循环时:for(int i=0;i<s.length;i++) {} 这样JIT只需要对边界进行一次范围检测,千万不要用一个变量来代替s.length;有人会认为用一个变量先取出s.length的值再放到for循环中这样只取一次length的值,这样会提高效率:int len=s.length; for(int i=0;i<len;i++) {} ;但是我要告诉你这样就错了,你违背了JIT的本意,它会进行多次的边界检查,反而降低了效率。
对于循环我们要遵守以下规则:
1.尽量使用一维零基数组,CLR对一维零基数组使用了特殊的IL操作指令newarr,在访问数组时不需要通过索引减去偏移量来完成,而且JIT也只需要执行一次范围检查,可以大大提高访问性能。
2.尽量使用foreach循环,.net对于foreach非常宠爱,foreach循环总能被编译成最高效的代码。
今日c#性能优化明星:foreach
优化指数:90