richtextbox使用完需要释放资源吗

MissPumpkin 2017-03-20 11:13:30
代码里动态创建了多个richtextbox,内存一直在增长,直至程序崩溃,显示调用了dispose之后程序才正常使用。
想问一下为什么会出现这种情况,GC不是会自动回收资源么?
...全文
593 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
足球中国 2017-03-21
  • 打赏
  • 举报
回复
richtextbox好象com封装。是不是非要dispose 具体没跟踪过不清楚。但一般能手动dispose的地方最好手动调用。垃圾回收也不是万能的。
正怒月神 2017-03-20
  • 打赏
  • 举报
回复
动态创建控件,应该和垃圾回收没关系。 那么你到底创建了多少个richtextbox
Veary 2017-03-20
  • 打赏
  • 举报
回复
为什么那么多的RichTextBox ... 你可以编辑它的Paragraph ... 还有GC 这是一个看心情的东西 什么时候心情好谁也不清楚 而且他能处理的都是 不存在引用的内容
crystal_lz 2017-03-20
  • 打赏
  • 举报
回复
那你倒是创建了多少个 richtextbox?
xdashewan 2017-03-20
  • 打赏
  • 举报
回复
引用 2 楼 MissPumpkin 的回复:
我是在循环中创建richtextbox,将一段文字赋值给richtextbox,然后取到richtextbox的rtf流,保存到数据库中,循环体结束的时候不就是这个richtextbox不在使用的时候么
richtextbox局部变量?有没添加到画面上?数据库连接代码会导致溢出吗?
xuggzu 2017-03-20
  • 打赏
  • 举报
回复
gc是由net系统操作的,它要根据很多情况来决定是否立即执行垃圾回收,所以垃圾回收时间是不可控的。
MissPumpkin 2017-03-20
  • 打赏
  • 举报
回复
引用 1 楼 xdashewan 的回复:
你在没调用了dispose前,你是如何通知系统richtextbox不再使用了呢
我是在循环中创建richtextbox,将一段文字赋值给richtextbox,然后取到richtextbox的rtf流,保存到数据库中,循环体结束的时候不就是这个richtextbox不在使用的时候么
xdashewan 2017-03-20
  • 打赏
  • 举报
回复
你在没调用了dispose前,你是如何通知系统richtextbox不再使用了呢
crystal_lz 2017-03-20
  • 打赏
  • 举报
回复
引用 16 楼 MissPumpkin 的回复:
[quote=引用 14 楼 qq_17486399 的回复:] [quote=引用 13 楼 crystal_lz 的回复:] 你仿佛在逗我笑 for (int i = 0; i < 10000; i++) { RichTextBox rich = new RichTextBox(); rich.Rtf = @"{\rtf1。。。}"; } 弱弱的问一句 你这个代码有什么用?。。
这哥们的系统是不是崩了啊[/quote] 丢人了 不好意思[/quote] 那你倒是要说清楚啊。。。
xdashewan 2017-03-20
  • 打赏
  • 举报
回复
引用 17 楼 MissPumpkin 的回复:
这个道理我明白,只不过代码那样的话需要大动之前的代码,只好先凑合着显式调用dispose,然后就引发了过来问这个问题
去看一下变量的生命周期的相关资料
MissPumpkin 2017-03-20
  • 打赏
  • 举报
回复
引用 8 楼 xdashewan 的回复:
说白了,如果不是用来显示,你只需要1个richtextbox就足够了
这个道理我明白,只不过代码那样的话需要大动之前的代码,只好先凑合着显式调用dispose,然后就引发了过来问这个问题
MissPumpkin 2017-03-20
  • 打赏
  • 举报
回复
引用 14 楼 qq_17486399 的回复:
[quote=引用 13 楼 crystal_lz 的回复:] 你仿佛在逗我笑 for (int i = 0; i < 10000; i++) { RichTextBox rich = new RichTextBox(); rich.Rtf = @"{\rtf1。。。}"; } 弱弱的问一句 你这个代码有什么用?。。
这哥们的系统是不是崩了啊[/quote] 丢人了 不好意思
MissPumpkin 2017-03-20
  • 打赏
  • 举报
回复
引用 13 楼 crystal_lz 的回复:
你仿佛在逗我笑 for (int i = 0; i < 10000; i++) { RichTextBox rich = new RichTextBox(); rich.Rtf = @"{\rtf1。。。}"; } 弱弱的问一句 你这个代码有什么用?。。
原来的代码不是这样的 原来还有一些其他逻辑在里面 我只是简化了一下写了这个代码试验 我一开始以为循环结束之后 richtextbox所占的内存就会被释放 被嘲笑了。。。。。
大鱼> 2017-03-20
  • 打赏
  • 举报
回复
引用 13 楼 crystal_lz 的回复:
你仿佛在逗我笑 for (int i = 0; i < 10000; i++) { RichTextBox rich = new RichTextBox(); rich.Rtf = @"{\rtf1。。。}"; } 弱弱的问一句 你这个代码有什么用?。。
这哥们的系统是不是崩了啊
crystal_lz 2017-03-20
  • 打赏
  • 举报
回复
你仿佛在逗我笑 for (int i = 0; i < 10000; i++) { RichTextBox rich = new RichTextBox(); rich.Rtf = @"{\rtf1。。。}"; } 弱弱的问一句 你这个代码有什么用?。。
xuzuning 2017-03-20
  • 打赏
  • 举报
回复
很简单,同样的内容 word 就要比 txt 大许多
MissPumpkin 2017-03-20
  • 打赏
  • 举报
回复
引用 4 楼 xdashewan 的回复:
[quote=引用 2 楼 MissPumpkin 的回复:] 我是在循环中创建richtextbox,将一段文字赋值给richtextbox,然后取到richtextbox的rtf流,保存到数据库中,循环体结束的时候不就是这个richtextbox不在使用的时候么
richtextbox局部变量?有没添加到画面上?数据库连接代码会导致溢出吗?[/quote] 局部变量 没添加到画面上 不会 帮忙看看9楼我贴出的代码,谢谢!
MissPumpkin 2017-03-20
  • 打赏
  • 举报
回复
引用 3 楼 xuggzu 的回复:
gc是由net系统操作的,它要根据很多情况来决定是否立即执行垃圾回收,所以垃圾回收时间是不可控的。
帮忙看看9楼我贴出的代码,谢谢!
MissPumpkin 2017-03-20
  • 打赏
  • 举报
回复
具体用了多少个我也不清楚,代码不是我写的,但是我对内存清理这个机制不是很懂,像下面的代码中,第一个程序会崩溃,第二个就不会。不太明白是什么原因。
  private void button1_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < 10000; i++)
            {
                RichTextBox rich = new RichTextBox();
                rich.Rtf = @"{\rtf1\ansi\ansicpg936\deff0\deflang1033\deflangfe2052{\fonttbl{\f0\fnil\fcharset134 \'cb\'ce\'cc\'e5;}}\viewkind4\uc1\pard\lang2052\f0\fs18 0\par}";
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < 10000; i++)
            {
                RichTextBox rich = new RichTextBox();
                rich.Text = @"{\rtf1\ansi\ansicpg936\deff0\deflang1033\deflangfe2052{\fonttbl{\f0\fnil\fcharset134 \'cb\'ce\'cc\'e5;}}\viewkind4\uc1\pard\lang2052\f0\fs18 0\par}";
            }
        }
xdashewan 2017-03-20
  • 打赏
  • 举报
回复
说白了,如果不是用来显示,你只需要1个richtextbox就足够了

110,536

社区成员

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

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

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