未处理的“System.OutOfMemoryException”类型的异常出现在mscorlib.dll中

vickjiang 2009-05-12 09:15:03
基础情况:
程序是WinForm的,用源程序试验还没发现这个问题,将一个应用程序复制成很多份,其中有几份(有时甚至是全部)有这个异常,也不是一打开程序就出现此异常
根据CLR调试,初步认为是线程操作问题,大致代码如下:

if (th.ThreadState == ThreadState.Running)
{
th.Abort();
th = new Thread(new ThreadStart(Dothings)); //Dothings 需要执行比较长一点的时间
th.Start();
}

补充:以前也是用同样的程序,没出现过此问题,望各位指点
...全文
880 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
vickjiang 2009-05-19
  • 打赏
  • 举报
回复
谢谢各位的建议,好像是解决了问题。

但郁闷的是 遇到偶尔会遇到线程挂起后过一段时间又继续执行的情况
vickjiang 2009-05-13
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 jest850615 的回复:]
C# code
if (th.ThreadState == ThreadState.Running)
{
th.Abort();

GC.Collect();//强制内存回收

th = new Thread(new ThreadStart(Dothings)); //Dothings 需要执行比较长一点的时间
th.Start();
}
加上上面垃圾回收看看.
[/Quote]

GC.Collect();//强制内存回收
弱弱地问一句:
这个会回收掉其他的内存吗? 程序里不只有这一个线程 要是把所有都回收了是不是有点不妥
jest850615 2009-05-13
  • 打赏
  • 举报
回复

if (th.ThreadState == ThreadState.Running)
{
th.Abort();

GC.Collect();//强制内存回收

th = new Thread(new ThreadStart(Dothings)); //Dothings 需要执行比较长一点的时间
th.Start();
}

加上上面垃圾回收看看.
光宇广贞 2009-05-13
  • 打赏
  • 举报
回复
代码有问题

about()是提交一个请求,并没有立即中断操作,你需要随后检测线程状态,直到线程的state为stopped或者abouted才可以,否则后面的操作可能会造成异常。
vickjiang 2009-05-12
  • 打赏
  • 举报
回复
谢谢楼上的

我也看了一下内存,那台机上所有东西加起来才900M左右内存,
奇怪的是退出的全是我写的程序,其他程序照常运行,按理说只应该只退一两个程序才对,现在的情况是开了十个(复制出来的)应用程序间断性地掉了大半

以前也在那机上挂过,没出现这个问题
pricks 2009-05-12
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wodegege10 的回复:]
内存溢出,资源没有释放掉。
重点查看比较占内存的东西,看看他们都到哪去了
如果有非托管也是重点检查对象。
[/Quote]

up
wenbin 2009-05-12
  • 打赏
  • 举报
回复
内存溢出,资源没有释放掉。
重点查看比较占内存的东西,看看他们都到哪去了
如果有非托管也是重点检查对象。
vickjiang 2009-05-12
  • 打赏
  • 举报
回复
应该不会死循环,我用的是for,最多就执行20次
我姓区不姓区 2009-05-12
  • 打赏
  • 举报
回复
死循环了?

110,533

社区成员

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

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

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