让我们来纠结一下C#的效率问题
我一直在纠结这个问题:
C# code
// 有一个函数
private string dosomething(data[] anyarray)
{
// 例如将数据转换为ascii字符串
// 其他问题先不考虑
}
// 我在某个函数中 必须要使用这个dosomething 函数
//例如里面的代码是这样的
public void allowdataArray(any)
{
if(dosomething(any).indexof("abc")>=0)
{
return;
}
otherfunction(dosomething(any));
}
// 在这个函数中我使用里两次dosomething(any),也就是说我执行了两次dosomething中的代码
// 但是我如果这样做
public void allowdataArray(any)
{
string temp=dosomething(any);
if(temp.indexof("abc")>=0)
{
return;
}
otherfunction(temp);
}
// 那么表示我执行了一次函数
但是接下来的问题就是 :
使用函数返回值 那么我就会多次运行里面的代码,实际运用中可能会调用多次,那么就会执行多次
如果我使用一个变量来保存这个值,那么就是说我只是执行了一次,但是我又做了新建一个变量,然后对这个变量赋了值,然后又要引用,但是这个途中,我并没有对这个变量进行运算等操作,
那么到底是哪个方式比较快呢?
求解
allowdataArray(any)的使用很频繁的 ,所以我不得不纠结这个问题,或者有没有更好的处理方式?
------解决方案--------------------只要你调用dosomething就会执行,所以用变量保存结果,后续都访问变量
------解决方案--------------------没必要纠结。
你认为“引用一个对象进行比较或运算”快,
还是“经过运算得到一个对象,再进行该对象的比较或运算”快?
------解决方案--------------------这还用想吗?少做了几次运算当然是快的
C# code
class MyList
{
public static int Count
{
get
{
Sleep(1000);
return 10;
}
}
}
void Func()
{
int count = MyList.Count;
for(int i = 0;i < count;i++)
{}
}
void Func()
{
for(int i = 0;i < MyList.Count;i++)
{}
}
------解决方案--------------------
直接通过anyarray来判断是否需要转换
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
用这么点内存换时间是值得的,至于你说的有人跟你说的那个什么有点偏激,是看情况而定的