作者Peruheru (还在想)
看板Visual_Basic
标题[.NET] 程式产生似乎是记忆体不够的错误
时间Tue Jun 16 17:49:11 2009
请输入专案类型(网站专案或者应用程式专案):应用程式专案
这是我之前问到资料库,或是物件的生命周期等问题时
所做的是同一个程式
大致上的功能都做出来了
给委托人时他说遇到一个问题
我在写程式时都是使用同一组测试资料
(碍於要提供的资料量太多,有好几张表格要同时读入,且那是其他软体产生的)
主要就是做大约长度为240,时间为500次的模拟作业而已
委托人在测试时说
他使用一组长度为1100左右
时间为3100次左右的模拟时
跳出了System.OutOfMemoryException 未处理的错误
================================================
System.OutOfMemoryException 未处理
Message="已发生类型 'System.OutOfMemoryException' 的例外状况。"
Source="mscorlib"
StackTrace:
於System.Object.MemberwiseClone() 於System.Array.Clone()
於CTMandKalmanFliter.Form1.RunCTMandKalman() 於[我的程式码路径]:行 685
於System.Threading.ThreadHelper.ThreadStart_Context(Object state)
於System.Threading.ExecutionContext.run
================================================
看起来是超出可使用的记忆体
在这个程式内,会产生一个大约是3100 x 171的表格
时间点有多长,这个表格就会产生几个
所以总共是3100 x 3100 x 171笔型态为double的资料
我一看就觉得会爆炸的凶手就是它
所以我在徵求同意後
将原本每次结果都会存下来的做法
改成只会储存最後一次的结果(但中间还是会产生那些表格,只是会直接放弃)
我丢给他修改过的版本
他却说他还是不能跑
我自己试了一次,虽然要跑三个多小时
不过还是跑得完
想说是不是只是他硬体比较差
结果我要试第二次时
我自己也出现同样的错误了
这表示前面错误的结果
没有被释放掉就留到了这一次吗?
我有确实得将那个巨大的表格
在用完以後释放掉呀(使用 = Nothing 的做法)
但是结果却还是没有真正的释放掉吗?
其实应该还是足够执行才对的
请问要怎麽叫VB去回收那些资源呢?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 192.192.154.54
1F:推 fumizuki:GC.Collect(0) 可以强制回收最近使用的资源 06/16 21:59
2F:→ new1011:32BIT的程式最多可以定址4g的资料 06/16 22:54
3F:→ Peruheru:开始试试看要写在哪里才对... 06/17 01:00