关于资源释放的疑惑请高手指点迷津---在线等待

__ANDY__WU 2005-03-24 11:24:40
HtmlTable a = new HtmlTable();
HtmlTableRow b = new HtmlTableRow();
HtmlTableCell c = new HtmlTableCell();
TextBox d = new TextBox();

c.Controls.Add(d);
b.Controls.Add(c);
a.Controls.Add(b);

请问在运行 a.Disposed();语句后

问题1: 后b还会存在吗? (20分)
问题2: b所占有的资源还未释放吗?(20分)
问题3: a = null; 和 a.Disposed(); 有什么区别 a = null 后a所占有的资源会释放吗? (40分)
问题4: 关于资源释放的讨论 (20分)
...全文
123 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
__ANDY__WU 2005-03-31
  • 打赏
  • 举报
回复
ok 多谢 hujiiori(Coder×Coder——sytu) 揭帖了
gudengyeren 2005-03-29
  • 打赏
  • 举报
回复
帮顶一下
hujiiori 2005-03-29
  • 打赏
  • 举报
回复
这样不会泄漏的,因为有a.Controls[i]指向每一个htmlTableRow,如果写a.Controls[i]=null,就泄漏了,明白?
__ANDY__WU 2005-03-29
  • 打赏
  • 举报
回复
TO :hujiiori(Coder×Coder——sytu)

如果不知道B的变量名称?
比如下列代码:

HtmlTable a = new HtmlTable();
for (int i=0; i<10; i++)
{
HtmlTableRow b = new HtmlTableRow();
a.Controls.Add(b);
}
这样的代码会会造成内存泄漏吗?b 变量在最后只代表了最后一行的HtmlTableRow,
那前面的 HtmlTableRow 呢?

__ANDY__WU 2005-03-24
  • 打赏
  • 举报
回复
如果不知道B的变量名称?
只知道b在a中,用什么办法才能将a和b 释放?
flyskywlh 2005-03-24
  • 打赏
  • 举报
回复
B肯定存在的,作为变量,它和A没有联系.
B既然存在,当然没释放内存
a=null,我觉得在内存地址里应该还存在个A,而a.disopse()是释放了内存的,不占内存空间了
hujiiori 2005-03-24
  • 打赏
  • 举报
回复
1:b只是一个变量,存在
2:未释放,因为有b指示内存
3:a=null后,如果a原来指示的资源没有别的变量指示,就交个gc随时可能释放。a.disopse()要求gc释放资源,但不一定马上
4:找些详细的资料看
__ANDY__WU 2005-03-24
  • 打赏
  • 举报
回复
帮忙啊
__ANDY__WU 2005-03-24
  • 打赏
  • 举报
回复
UP一下
hujiiori 2005-03-24
  • 打赏
  • 举报
回复
如果不知道B的变量名称?
---------------------
如果说b的变量名已经不存在了,那么b所指的资源会有gc负责释放,这种情况在非托管语言中已经会造成内存泄漏了
usepc 2005-03-24
  • 打赏
  • 举报
回复
我一般是自已实现的实例用手动释放资源。
b c 都会存在,而且最好手动释放资源。
a = null不用 a.Disposed(),还会存在,只有a.Disposed()才会释放。
junstyle 2005-03-24
  • 打赏
  • 举报
回复
路过 UP一下~~~

111,120

社区成员

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

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

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