c# 内存溢出问题 求救!!!

gaoxing_1985007 2010-09-18 06:39:23
大致情况如下:
用电脑、路由器和PVR(和VCR差不多,不过不是录像带,是移动硬盘的,有网络功能)组成一个小的局域网,路由器动态分配给PVR一个IP,我用C#获取该IP,用ping的方法测试PVR的网络功能是否正常。
现在我写好了程序,点击Button按钮后,开始ping,并把接收数据包的信息显示在RichtextBox控件中,然后点击初始化按钮(也就是把RichtextBox控件中的信息清空),继续下一次测试,但是我发现,每次测试完之后,内存占用就会增加一些,当测试到一定次数后(每次基本上都是109次),内存溢出,程序会报“A first chance exception of type 'System.OutOfMemoryException'occurred in System.dll ”的异常。我想应该是线程每次执行完以后,虽然已经退出,但是并没有释放所占有的内存,导致最后内存溢出。


private void Button1_Click(Object sender,EventArgs e)
{
Thread pingTh = new Thread(Ping); //Ping为实现ping PVR的具体方法,通过发送ICMP数据包来实现
pingTh.Start();
}


随着内存占用的增加,程序的执行也变的非常慢,ping的结果要过好几秒才能显示在控件中。

我想可不可以在线程结束后手工释放所占用的内存空间?或者是程序执行若干次后手工释放?

望指教,谢谢!!!
...全文
316 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
华仔lugl 2010-09-19
  • 打赏
  • 举报
回复
学习了!
HolyPlace 2010-09-19
  • 打赏
  • 举报
回复
每次新开一个线程的时候一定要释放前面的资源,这是你内存溢出的主要原因
intotheland 2010-09-18
  • 打赏
  • 举报
回复
这个跟线程没关系,当一个线程结束后线程本身所占用的因为分配线程而占用的资源会自动释放,线程不存在释放的问题,我猜你的线程里调用的某个对象没有释放,或者你先前运行的线程并没有结束。
泰勒公式 2010-09-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 bloodish 的回复:]
每次Button Click你都新开一个线程,你说能溢出吗?
尝试先把前一个线程杀掉.



C# code
Thread pingTh = null;
private void Button1_Click(Object sender, EventArgs e)
{
if (pingTh != null)
……
[/Quote]
先前的进程得FREE掉,不然计算机不敢吧你的进程关闭,就像楼上说的那样,程序中注意一下每次PING完事后结束进程即可。虽说.NETFramework有垃圾回收机制,但是这是一种随即而且不定时的回收方式,就比如说CLR会把那些长时间不用的进程,内存,分作几个等级,它会处理等级比较低的先,这样有可能导致很多垃圾一时间处理不了,时间长了后也能导致你的内存OUT,所以可以加些手动的命令,通知CLR这个垃圾及时回收。
porschev 2010-09-18
  • 打赏
  • 举报
回复

可以在下一个线程开始时。。。。

把前面一个线程Abort掉。。。

它执行之后会自动释放掉资源
bloodish 2010-09-18
  • 打赏
  • 举报
回复
每次Button Click你都新开一个线程,你说能溢出吗?
尝试先把前一个线程杀掉.


Thread pingTh = null;
private void Button1_Click(Object sender, EventArgs e)
{
if (pingTh != null)
{
try
{
pingTh.Abort();
}
catch
{

}
finally
{
pingTh = null;
}
}
pingTh = new Thread(Ping);
pingTh.Start();
}
threenewbee 2010-09-18
  • 打赏
  • 举报
回复
当然,你可以检查你的代码,除错。具体代码没有,也帮不了你。

个人觉得,你可以使用另一个进程,在你要求不高的情况下。
兔子-顾问 2010-09-18
  • 打赏
  • 举报
回复
你想法没错。执行一段时间后,比如若干次,自己调用垃圾回收。
你要注意你没贴出的代码,不要忘记释放非托管资源。

110,502

社区成员

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

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

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