方法传参数问题...等待庖丁解牛

Sunsik1986 2009-03-15 01:06:09
问个问题...
public string AddClass( DataSet ds)
{
....
}

public string AddClass( string str)
{
....
}

这2个方法有快慢,内存大小的区别吗?我看例子DataSet 中的数据只用到ds.rows[0][0]...那么直接传1条,用string传不好些吗?为什么要传个DataSet?
貌似传DataSet 不会影响效率或者内存空间...引用类型来的...
...全文
86 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
vrhero 2009-03-15
  • 打赏
  • 举报
回复
不止是指针...都说了将在AddClass方法体内创建一个新的DataSet对象,此对象是传递的参数的副本...
Sunsik1986 2009-03-15
  • 打赏
  • 举报
回复
如此说传递dataset也无所谓...因为是指针...存储的是指针比传递字符串还节省了内存空间
而且dataset传递过去也方便...以便扩展...对数据加工什么的
charlenchen 2009-03-15
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 Sunsik1986 的回复:]
还存在啊...
ds.dispose()后...
我再打印对象 仍然存在啊....

dataset本身就是引用类型...加ref和不加一样的
[/Quote]
既然还存在,那么加ref和不加ref就是不一样的
vrhero 2009-03-15
  • 打赏
  • 举报
回复
还有一点...这个引用的副本仅仅是DataSet对象的引用的副本,该DataSet对象的引用成员仍然是相同的引用...所以不加ref可以更改该DataSet对象的引用成员...
vrhero 2009-03-15
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 Sunsik1986 的回复:]
还存在啊...
ds.dispose()后...
我再打印对象 仍然存在啊....

dataset本身就是引用类型...加ref和不加一样的
[/Quote]
不一样...传递的都是一个引用的副本,但是加ref将保留方法中对引用的对象的更改,不加ref退出方法体时放弃该副本...

也就是说当你传递一个DataSet对象给方法AddClass时,在AddClass方法体内将创建一个新的DataSet对象...
Sunsik1986 2009-03-15
  • 打赏
  • 举报
回复
还存在啊...
ds.dispose()后...
我再打印对象 仍然存在啊....

dataset本身就是引用类型...加ref和不加一样的
大头苍蝇 2009-03-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 Sunsik1986 的回复:]
貌似DataSet不占用多少资源吧....DataSet在表示层就开辟了的...知识传到业务逻辑层处理过后传到数据访问层罢了

想想DataSet传递的是指针吧...又不新开辟个DataSet...不占用什么内存吧
[/Quote]

DataSet dsOut = new DataSet();
AddClass(dsOut )

public string AddClass( DataSet ds)
{
ds.dispose();
}

dsOut 还存在吗?
大头苍蝇 2009-03-15
  • 打赏
  • 举报
回复
public string AddClass( DataSet ds)
{
....
}

public string AddClass( string str)
{
....
}

第一个方法需要在内存控件复制一个新的 ds,ds的大则开销大

第一个方法改为
public string AddClass(ref DataSet ds)
{
....
}
不复制ds,直接使用你传给函数的参数。
(类似与C语言中的指针参数)



Sunsik1986 2009-03-15
  • 打赏
  • 举报
回复
而用string的话要另外开辟个空间了吧....反而不好 好像....
Sunsik1986 2009-03-15
  • 打赏
  • 举报
回复
貌似DataSet不占用多少资源吧....DataSet在表示层就开辟了的...知识传到业务逻辑层处理过后传到数据访问层罢了

想想DataSet传递的是指针吧...又不新开辟个DataSet...不占用什么内存吧
  • 打赏
  • 举报
回复
虽然模模糊糊知道怎么回事,但不知道是不是正确答案。。。等待正确回答
  • 打赏
  • 举报
回复
只有一个值的话就用string好
DataSet 比较占资源

不知道你的案例是在那里看到的

111,126

社区成员

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

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

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