一些细微的操作有时候可能会决定整个系统的性能。很有可能一个for写的不好就会让你的性能降低N倍
以下是一些比较有效果的提升性能技巧:
1、循环的时候,使用临时变量保存属性的值循环在.net中提高性能的技巧
for(int i =0; i < xxx.xxx ;i++)
大家知道,C#允许在属性里进行编程,也就意味着,有可能在get访问器中做一些其他的事情。
如果get里面做的事情比较多的事情,那么上面的for语句将变得非常低效。所以,当你确定所访问的属性仅
仅只会返回字段的时候而且你需要这个字段的意义仅在于遍历,可以这么做,如果不确定,最好使用
for(int i = 0, j = xxx.xxx; i < j; i++)
2、循环时候小心的使用返回数组的属性
在设计返回数组的属性的时候,考虑到系统安全和稳定,大部分人都会在返回的时候只返回一个数组的副本
for(int i =0; i < microsoft.Employee.Length ; i ++)
{
if(microsoft.Employee[i].Name=="aaa")
....
}
上面这段代码,Employee属性返回的是一个数组副本,也就是说,上面的循环将产生2N+1个副本
这对于性能的损耗是巨大的。
解决这个问题的方法是,使用一个临时的数组变量来接收这个数组副本,这样问题就解决了
Employee[] employees = Microsoft.Employee;
for(inti i = 0, i < employees.Length; i ++)
...
3、切记在循环外部保存固定不变的数据,供循环使用
有的时候,我们在写循环时会范这样一个错误。
假设我有一个方法是 GetName(),目的是从数据库中获取一个字段信息,然后返回。
然后我想给一个string数组的每个成员都赋值成这个字段信息。
for(int i = 0; i < stringArray.Length; i ++)
{
stringArray[i] = GetName();
}
这么循环,也就意味着,你必须查询数据库N次来进行赋值。性能损失可想而知,所以,我们可以这么写:
循环在.net中提高性能的技巧
string name = GetName();
for(int i = 0; i < stringArray.Length; i++)
{
stringArray[i] = name;
}
4、使用局部变量代替成员或静态变量参与到循环中
局部变量具有比成员变量和静态变量更好的性能,重复使用效果效果提升比较明显。
对比性能
//方法一
private int _i = 0;
private void aaa()
{
for(int i = 0; i < 1000 ; i ++)
{
_i++;
}
}
//方法二
private int _i = 0;
private void aaa()
{
int a = _i;
for(int i = 0; i < 1000 ; i ++)
{
a++;
}
_i = a
}循环在.net中提高性能的技巧
二方法的性能在一些时候会比一方法快出几倍