vb.net2008使用24个线程分别读写不同的24个160MB的access数据库,正常运行1小时后出错提示磁盘空间不中

bobjxrich 2019-04-18 09:00:15
vb.net2008使用24个线程分别读取不同的24个160MB的access数据库的数据,然后 计算 处理,然后将计算后的结果增加到表中,正常运行1小时后出错提示磁盘空间不足.在运行过程中,内存大约使用4G.
在调试中,如果 是做成72个线程分别操作72个ACCESS文件,进程启动大部分后出错提示:未知错误.运行时显示内存占用大约7G.
如果 是做成3个线程分别操作3个ACCESS文件,程序运行正常.
电脑内存是8G,操作系统winnt,虚拟内存分配是C,D分别8G,硬盘空间500G,C,D剩余空间70G以上.
由于计算时间的问题,不得不使用多线程.单线程计算,预计完成时间是144小时,所以考虑多线程做数据处理.
为什么会出现磁盘空间不足的问题?怎么处理?或是 应该如何调整方案?或是采取什么办法来改进?
请各位大侠相助.谢谢.
...全文
211 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
bobjxrich 2019-04-25
  • 打赏
  • 举报
回复
今天结帖.所出现的技术问题没解决.但是,换了一个思路,将统计代码改写了,程序的目的达到了.感谢各位大侠的回复.
jhonsonzhang 2019-04-18
  • 打赏
  • 举报
回复
方法很多,或者在catch 里面用异步线程处理错误。比如
try ........ catch me.begininvoke (sub() me.listbox1.items.add (mdbPath.tostring) end sub)

这样就异步把mdb的路径加到listbox里了,随后你就看着办了。
jhonsonzhang 2019-04-18
  • 打赏
  • 举报
回复
每个异步线程都try catch,回调函数就能捕捉到错误了,而且也不会报错导致线程终止。错误的列表再重新处理一次,然后还会有错误列表生成,就再处理。
jhonsonzhang 2019-04-18
  • 打赏
  • 举报
回复
线程callsback,在callsback中处理错误。我以前也遇到过,但不是处理mdb,是大量的图片。我是在回调函数里面生成错误列表,失败的列表保存后,再重新处理失败的列表。
wanghui0380 2019-04-18
  • 打赏
  • 举报
回复
引用 7 楼 bobjxrich 的回复:
运行的时候,我观察了内在和CPU使用情况.一直是比较平稳.CPU在50%,内存在4G.主要这个软件不是一次性需求,用户在陆续5年时间内不定期增加各种不同的统计与数字计算功能,而且需要计算的数据量越来越大.统计方法也越来越复杂.去年曾经要求用户做个整体构思,重新规划.但是,用户仍然和以前一样.马虎讲一下都感觉复杂:1.每日数据增加160条,每条100个字段.2.其中一项统计是:取50天的数据分成160组,每组每条数据同列做间0-N行比较并统计,然后对统计出来的数字分字段排序,排序后再寻找指定的数据. 还不知道后续功能怎么增加,也不知道这个软件什么时候才能结束.
这种要求现在是独立出来的叫ETL,比如spark ,flink ,storm,他独立在外部随时可以根据情况扩展。当然在存储上是分布式文件系统比如hadoop
wanghui0380 2019-04-18
  • 打赏
  • 举报
回复
报磁盘空间,你干嘛纠结内存
jhonsonzhang 2019-04-18
  • 打赏
  • 举报
回复
一直都有错误生成,让他们传那几个mdb给你,找到里面数据错误的原因,返回给他们,汗一下他们。
jhonsonzhang 2019-04-18
  • 打赏
  • 举报
回复
这感觉是在做训练模型啊,我觉得如果统计方法没法更改的话,还真只有按照错误处理的方法来解决,其它都不可靠。因为不可知啊,难道用户更改一次,下次报错,你又来找原因,生成错误列表,让他们持续运行,一直到错误列表没了,就OK。
bobjxrich 2019-04-18
  • 打赏
  • 举报
回复
运行的时候,我观察了内在和CPU使用情况.一直是比较平稳.CPU在50%,内存在4G.主要这个软件不是一次性需求,用户在陆续5年时间内不定期增加各种不同的统计与数字计算功能,而且需要计算的数据量越来越大.统计方法也越来越复杂.去年曾经要求用户做个整体构思,重新规划.但是,用户仍然和以前一样.马虎讲一下都感觉复杂:1.每日数据增加160条,每条100个字段.2.其中一项统计是:取50天的数据分成160组,每组每条数据同列做间0-N行比较并统计,然后对统计出来的数字分字段排序,排序后再寻找指定的数据.
还不知道后续功能怎么增加,也不知道这个软件什么时候才能结束.
yishumei 2019-04-18
  • 打赏
  • 举报
回复
建议楼主在程序运行时打开任务管理器,在性能页面下监控内存使用情况。如果可用内存越来越少,那大概率是计算过程中内存变量没有被释放造成的。
jhonsonzhang 2019-04-18
  • 打赏
  • 举报
回复
我以前是这样解决的,记得当初也苦闷,但运行几次以后,你基本就知道开几个线程合适。通过这样的处理,还可以检查到你方法中不太好的代码。我记得当初就是这样发现代码中有不爽的部分,更改后,就再也没错误了。用户那儿都用了2年了,都没有错。
bobjxrich 2019-04-18
  • 打赏
  • 举报
回复
我的理解,你所的内容 ,整个思路,就是说,让他出错,记录出错未处理数据,再处理,直到处理完成.此外,还有没有别的办法?

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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