读书人

让小弟我们来纠结一上C#的效率有关问题

发布时间: 2012-09-28 00:03:35 作者: rapoo

让我们来纠结一下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来判断是否需要转换



[解决办法]
探讨
引用:

只要你调用dosomething就会执行,所以用变量保存结果,后续都访问变量


其实有人这样告诉我,如果一个变量从产生到完成使用,这个过程中 ,他的值没有变过,那么,这样的变量就不应该产生.
他的意思大约是这样,变量是用来"变"的,但是你都不变 ,那么就不要使用....

[解决办法]
探讨
引用:

没必要纠结。
你认为“引用一个对象进行比较或运算”快,
还是“经过运算得到一个对象,再进行该对象的比较或运算”快?

从直观是我也是倾向于你的看法,
但是我就是向知道 ,新建一个变量,赋值,引用,也是需要消耗时间的...
我就是纠结这个时间到底值不值得呢?

[解决办法]
探讨

引用:

只要你调用dosomething就会执行,所以用变量保存结果,后续都访问变量


其实有人这样告诉我,如果一个变量从产生到完成使用,这个过程中 ,他的值没有变过,那么,这样的变量就不应该产生.
他的意思大约是这样,变量是用来"变"的,但是你都不变 ,那么就不要使用....

[解决办法]
用这么点内存换时间是值得的,至于你说的有人跟你说的那个什么有点偏激,是看情况而定的

读书人网 >C#

热点推荐