让我们来纠结一下C#的效率问题

0xAAFF 2012-09-06 11:21:32
我一直在纠结这个问题:


// 有一个函数

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)的使用很频繁的 ,所以我不得不纠结这个问题,或者有没有更好的处理方式?
...全文
118 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
0xAAFF 2012-09-06
  • 打赏
  • 举报
回复
万恶的404....F5


吃饭了 回来结贴
  • 打赏
  • 举报
回复
用这么点内存换时间是值得的,至于你说的有人跟你说的那个什么有点偏激,是看情况而定的
0xAAFF 2012-09-06
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

引用 7 楼 的回复:
引用 2 楼 的回复:

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

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

方法调用需要耗时,方法内部处理需要耗时,因为调用方法而声明的变量……
[/Quote]


啊 一语惊醒梦中人啊 顿悟了
SocketUpEx 2012-09-06
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

引用 2 楼 的回复:

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

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

这有什么好纠结的
比比执行的代码数就行




0xAAFF 2012-09-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

直接通过anyarray来判断是否需要转换
[/Quote]

这个想法很不错啊
0xAAFF 2012-09-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

这还用想吗?少做了几次运算当然是快的
C# code
class MyList
{
public static int Count
{
get
{
Sleep(1000);
return 10;
}
}
}


void Func()
{
int count = MyList.Count;
for(in……
[/Quote]

这个我很同意你的做法 呵呵
SocketUpEx 2012-09-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

引用 1 楼 的回复:

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


其实有人这样告诉我,如果一个变量从产生到完成使用,这个过程中 ,他的值没有变过,那么,这样的变量就不应该产生.
他的意思大约是这样,变量是用来"变"的,但是你都不变 ,那么就不要使用....
[/Quote]
先送它两个字,放屁。
然后再说说
其实他说的也对:
变量的值没有变过,那么,这样的变量就不应该产生,甚至说,根本不会用到这样的变量
但是:
变量一开始的值是什么?
String s;
Int32 i;

string temp=dosomething(any);
这条语句是定义加赋值
上面的语句过后,temp已经不是原来的值了




cheng2005 2012-09-06
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
引用 2 楼 的回复:

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

从直观是我也是倾向于你的看法,
但是我就是向知道 ,新建一个变量,赋值,引用,也是需要消耗时间的...
我就是纠结这个时间到底值不值得呢?
[/Quote]
方法调用需要耗时,方法内部处理需要耗时,因为调用方法而声明的变量需要耗时。你把这些都选择性的忽略了?
0xAAFF 2012-09-06
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

没必要纠结。
你认为“引用一个对象进行比较或运算”快,
还是“经过运算得到一个对象,再进行该对象的比较或运算”快?
[/Quote]
从直观是我也是倾向于你的看法,
但是我就是向知道 ,新建一个变量,赋值,引用,也是需要消耗时间的...
我就是纠结这个时间到底值不值得呢?
cheng2005 2012-09-06
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
引用 1 楼 的回复:

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


其实有人这样告诉我,如果一个变量从产生到完成使用,这个过程中 ,他的值没有变过,那么,这样的变量就不应该产生.
他的意思大约是这样,变量是用来"变"的,但是你都不变 ,那么就不要使用....
[/Quote]
送它两个字,放屁。
0xAAFF 2012-09-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

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

其实有人这样告诉我,如果一个变量从产生到完成使用,这个过程中 ,他的值没有变过,那么,这样的变量就不应该产生.
他的意思大约是这样,变量是用来"变"的,但是你都不变 ,那么就不要使用....
SocketUpEx 2012-09-06
  • 打赏
  • 举报
回复
直接通过anyarray来判断是否需要转换


cheng2005 2012-09-06
  • 打赏
  • 举报
回复
这还用想吗?少做了几次运算当然是快的
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++)
{}
}
datafansbj 2012-09-06
  • 打赏
  • 举报
回复
没必要纠结。
你认为“引用一个对象进行比较或运算”快,
还是“经过运算得到一个对象,再进行该对象的比较或运算”快?
bdmh 2012-09-06
  • 打赏
  • 举报
回复
只要你调用dosomething就会执行,所以用变量保存结果,后续都访问变量

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧