精易论坛

标题: 内存溢出解决方法。 [打印本页]

作者: 云少i    时间: 2025-1-6 16:40
标题: 内存溢出解决方法。
需要处理大概100W个txt文件,主要就是替换文件内的一些内容,文件大小不一,从几十KB到十几M的都有,最大的30M左右,运行一段时间后,只要切换到别的窗口,这个编辑框里面就显示2147483647,内存溢出了,我看任务管理器中的此进程的内存占用才20-30M左右。但CPU占用超级大,如果中间不延迟暂停一段时间,就直接会出现CPU  100%。就算读一个文件延迟几秒甚至十秒,运行一段时间后切换到别的窗口,这个编辑框里面就会显示2147483647,时间一长,就提示内存溢出、报错了,大佬们,这个情况,该怎么处理呢?

  
子程序名返回值类型公开备 注
_按钮5_被单击  
启动线程 (&子程序4, , 集_子程序4)
子程序名返回值类型公开备 注
子程序4  
变量名类 型静态数组备 注
i整数型 
局_内容数组文本型0
i = 0
文件_枚举 (“”, “*.txt”, 局_内容数组, 真, , )
计次循环首 (取数组成员数 (局_内容数组), i)
如果真 (寻找文本 (局_内容数组 [i], “目录.txt”, , ) = -1)[i]
如果真 (寻找文本 (局_内容数组 [i], “\其他\”, , ) < 1 )
线程_启动_文本型 (到整数 (&子程序5), , , 局_内容数组 [i], 到文本 (i), , , , , , , , )


计次循环尾 ()
编辑框1.加入文本 (到文本 (取现行时间 ()) + “已完成”#换行符 )
子程序名返回值类型公开备 注
子程序5  
参数名类 型参考可空数组备 注
局_内容数组文本型
i文本型
变量名类 型静态数组备 注
局_内容文本型 
局_内容 = 子文本替换 (到文本 (读入文件 (局_内容数组)), “ ”, “”, , , )
' 这里有大概20个子文本替换,替换各种不同的内容
写到文件 (局_内容数组, 到字节集 ( #换行符 + 局_内容))
编辑框1.加入文本 (文本_自动补零 (i, 5)取空白文本 (5) + 局_内容数组 + #换行符 )


i支持库列表   支持库注释   
EThread多线程支持库


作者: Bong    时间: 2025-1-6 16:49
编辑框装的文本是有上限的
作者: 云少i    时间: 2025-1-6 16:58
Bong 发表于 2025-1-6 16:49
编辑框装的文本是有上限的

编辑框只显示文件的全路径,其他不显示。应该没到上限的地步
作者: 亡胧    时间: 2025-1-6 16:58
用线程池控制线程数量吧,你这一次性投递了那么多线程,崩溃了正常
作者: 呵呵仙    时间: 2025-1-6 17:52
一个32位软件,只能占用内存在整数范围:-2147483648 到 2147483647,即不能超这个正值.不然就像你这样了!
你不要少看这一个30m的文件.函数工作过程中,可能需临时创建几十,几百,乃至上千的局部变量加入运算!
所以,当你碰到那些看不起64位软件的人.一笑而过是对的!!
作者: 独倚斜阳    时间: 2025-1-6 19:21
不停的启动线程?
你要么线程池控制 或者直接干协程啊
作者: 算法艺术家    时间: 2025-1-6 20:30
这种级别的数据处理 窗口组件就不要参与了吧,结果直接写出来看呗
作者: frankiy    时间: 2025-1-6 20:48
你的线程控制有问题哈!实际运行中,只是对内存的压力稍微大一些。不应该出现内存溢出。

1.e

923.74 KB, 下载次数: 5


作者: chenboss    时间: 2025-1-7 07:26
控制一下线程池,32位程序无限启动线程最多就1500个左右,线程本身是占内存的,再加上每个同时读入文件,内存很快就爆2G了
作者: chenboss    时间: 2025-1-7 07:26
通用稳定多线程队列.e

作者: 云少i    时间: 2025-1-10 08:53
frankiy 发表于 2025-1-6 20:48
你的线程控制有问题哈!实际运行中,只是对内存的压力稍微大一些。不应该出现内存溢出。
...

处理慢得很,试运行1个多小时才处理不到3000个文件。
作者: 小书    时间: 2025-3-7 11:14
线程_启动_文本型 这个有问题;编辑框里面显示2147483647是另外一个问题。




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4