关于给一个对象进行递归赋值的问题

sby5104 2015-04-28 02:12:01
debug 的时候发现
如果将需要赋值的对象以参数的形式传入递归中, 方法执行会特别慢
如果将递归设置成有返回值的递归, 将需要赋值的对象直接 = 或者addRange 递归的返回值, 则会非常快
请问正常情况下会粗现这种case 吗?
如果有那原因又是什么呢?

伪代码:

List<string> result = new List<string>();
FillResultWithoutReturnValue(result);
void FillResultWithoutReturnValue(List<string> result )
{
取数据和部分处理逻辑
FillResultWithoutReturnValue(result);
}

List<string> result = new List<string>();
result.AddRange(FillResultWithReturnValue());
List<string> FillResultWithReturnValue( )
{
取数据和部分处理逻辑
List<string> temp = FillResultWithReturnValue();
return temp;
}
...全文
401 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
sby5104 2015-04-28
  • 打赏
  • 举报
回复
引用 9 楼 Z65443344 的回复:
而且你在递归函数里new数组再return 效率应该比直接给数组的元素赋值低才对.而不是更慢
3q, 我再去试试看
於黾 2015-04-28
  • 打赏
  • 举报
回复
而且你在递归函数里new数组再return 效率应该比直接给数组的元素赋值低才对.而不是更慢
於黾 2015-04-28
  • 打赏
  • 举报
回复
不应该出现 还是你代码写的有问题
sby5104 2015-04-28
  • 打赏
  • 举报
回复
引用 5 楼 Z65443344 的回复:
你确定不是因为一遍一遍访问数据库才慢?
换成了有返回值的那种递归, DB 读取次数还是那么多啊, 记得debug 的时候发现确实快了 现在已经换了逻辑, 减少了递归和读DB 的次数, 找不到当时咋写的了, 就是想问问正常情况下是不是不应该出现这种case.
sby5104 2015-04-28
  • 打赏
  • 举报
回复
引用 3 楼 Z65443344 的回复:
还是把你的逻辑放出来看,到底什么原因造成的
冏编辑不了问题了, 后面的伪代码应该是 List<string> result = new List<string>(); FillResultWithoutReturnValue(result); void FillResultWithoutReturnValue(List<string> result ) { 取数据和部分处理逻辑 FillResultWithoutReturnValue(result); } List<string> result = new List<string>(); result.AddRange(FillResultWithReturnValue()); List<string> FillResultWithReturnValue( ) { 取数据和部分处理逻辑 List<string> temp = new List<string>(); temp.AddRange(FillResultWithReturnValue()); return temp; }
於黾 2015-04-28
  • 打赏
  • 举报
回复
你确定不是因为一遍一遍访问数据库才慢?
sby5104 2015-04-28
  • 打赏
  • 举报
回复
引用 3 楼 Z65443344 的回复:
还是把你的逻辑放出来看,到底什么原因造成的
就是从某一个节点开始, 遍历出所有以他为根节点的子节点, 直到叶子节点为止, 并从DB 中连表查询出各个节点的数据.
於黾 2015-04-28
  • 打赏
  • 举报
回复
还是把你的逻辑放出来看,到底什么原因造成的
於黾 2015-04-28
  • 打赏
  • 举报
回复
哦,你没有用ref关键字 也就是递归里没有new数组? 那就不应该啊 List是引用类型,传递进去的只是个类似指针一样的东西,不应该存在效率上的巨大差别啊
於黾 2015-04-28
  • 打赏
  • 举报
回复
你把一个数组放进递归里,每递归一次,整个数组都要copy一次并传进去 如果你数组里元素非常多的话,当然是比只赋值一次要慢了 如果数组里元素少,或者递归次数少,应该区别不是很明显才对

110,538

社区成员

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

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

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