精易论坛

标题: 网页访问对象 内存泄露 [打印本页]

作者: 曼巴精神8    时间: 2024-2-26 05:53
标题: 网页访问对象 内存泄露
这个网页访问对象  一行代码   在多线程的情况下   每隔3~5分钟会让内存增加0.1M    网页访问对象bug.e (925.37 KB, 下载次数: 15)

我在论坛上也看到很多朋友都是在多线程环境下  或者死循环环境下出现内存泄露问题  想问一下针对这个代码应该如何进行优化

麻烦各位高手 帮我改改这个demo 谢谢

作者: 曼巴精神8    时间: 2024-2-26 06:46
@1752328925 哥有空来帮我看看撒
作者: jingyi11023995    时间: 2024-2-26 07:46
启动线程 (&线程, , 句柄)
关闭线程句柄 (句柄)

作者: qq1056123185    时间: 2024-2-26 07:56
用鱼刺吧~
作者: djfy2022    时间: 2024-2-26 08:05
这个不叫内存泄露,应该叫做 消耗内存或者吃内存
在循环尾上加个优化内存就解决了
请看图


内存优化.jpg (39.72 KB, 下载次数: 8)

内存优化

内存优化

作者: 飞宇    时间: 2024-2-26 08:06
用上一个版本的 模块不要用最新这一版的。
作者: 没事瞎琢磨    时间: 2024-2-26 09:02
拿到返回数据就给他关闭一下线程 怎么样?
作者: ASSHOLE    时间: 2024-2-26 10:31
和 网页访问对象 毫无关系,看代码就知道你的基础不到位

你的代码中主要泄漏内存的地方在时钟中执行的线程_启动2()
参数<3>的名称为“线程句柄”,类型为“整数型”,接收参数数据时采用参考传递方式,允许接收空参数数据。注明:请提供一个整数型的变量,用于存放新创建的线程句柄。
留空则自动关闭句柄,不留空则需要执行线程_关闭句柄 () 手动关闭句柄

而且你的许可证添加的位置毫无必要啊,可以直接去掉!
用时钟去执行线程,如果频率过低,也很容易出现问题啊!

作者: 曼巴精神8    时间: 2024-2-26 12:26
ASSHOLE 发表于 2024-2-26 10:31
和 网页访问对象 毫无关系,看代码就知道你的基础不到位

你的代码中主要泄漏内存的地方在时钟中执行的线程 ...

因为我必须和对方返回的数据  尽量时刻保持一致  所以得间隔很短的时间就得发出去一个网络请求以保证我的数据和对方的数据一致  不行过一段时间还是会内存溢出  
作者: 曼巴精神8    时间: 2024-2-26 12:27
没事瞎琢磨 发表于 2024-2-26 09:02
拿到返回数据就给他关闭一下线程 怎么样?

不行   试了
作者: 曼巴精神8    时间: 2024-2-26 12:27
飞宇 发表于 2024-2-26 08:06
用上一个版本的 模块不要用最新这一版的。

精易模块一样的  用过
作者: 曼巴精神8    时间: 2024-2-26 12:29
djfy2022 发表于 2024-2-26 08:05
这个不叫内存泄露,应该叫做 消耗内存或者吃内存
在循环尾上加个优化内存就解决了
请看图

他们都不建议
作者: 曼巴精神8    时间: 2024-2-26 12:29
jingyi11023995 发表于 2024-2-26 07:46
启动线程 (&线程, , 句柄)
关闭线程句柄 (句柄)

不行的  您测试测试 内存过3分钟后还是会上升
作者: just1993    时间: 2024-2-26 12:33
用鱼刺能解决这个问题。
作者: 曼巴精神8    时间: 2024-2-26 12:38
just1993 发表于 2024-2-26 12:33
用鱼刺能解决这个问题。

   哥  有没有demo啊  我用线程池 还是怎么解决 没明白啊
作者: 曼巴精神8    时间: 2024-2-26 12:38
qq1056123185 发表于 2024-2-26 07:56
用鱼刺吧~

   哥  有没有demo啊  我用线程池 还是怎么解决 没明白啊
作者: 1752328925    时间: 2024-2-26 12:45
这样应该可以

网页访问对象bug.e

925.66 KB, 下载次数: 16, 下载积分: 精币 -2 枚


作者: ASSHOLE    时间: 2024-2-26 12:45
曼巴精神8 发表于 2024-2-26 12:26
因为我必须和对方返回的数据  尽量时刻保持一致  所以得间隔很短的时间就得发出去一个网络请求以保证我的 ...

你的代码中获取了线程句柄又不手动释放,这就是造成内存泄漏的原因,而且许可证不是你这样用的,多个线程中使用同一个许可证,才能达到队列效果
作者: 曼巴精神8    时间: 2024-2-26 12:45
1752328925 发表于 2024-2-26 12:45
这样应该可以

哥  你来了  我看看
作者: 曼巴精神8    时间: 2024-2-26 12:46
1752328925 发表于 2024-2-26 12:45
这样应该可以

  哥程序直接崩了
作者: 1752328925    时间: 2024-2-26 12:47
曼巴精神8 发表于 2024-2-26 12:27
精易模块一样的  用过

我手写的,没有运行,只是控制 了一下线程最大数量
作者: 曼巴精神8    时间: 2024-2-26 12:48
ASSHOLE 发表于 2024-2-26 10:31
和 网页访问对象 毫无关系,看代码就知道你的基础不到位

你的代码中主要泄漏内存的地方在时钟中执行的线程 ...

我怀疑是不是自动关闭的句柄 太慢  而新开启的线程太快  导致它内存泄露的
作者: 1752328925    时间: 2024-2-26 12:49
曼巴精神8 发表于 2024-2-26 12:46
哥程序直接崩了

我优化一下
作者: 曼巴精神8    时间: 2024-2-26 12:49
ASSHOLE 发表于 2024-2-26 12:45
你的代码中获取了线程句柄又不手动释放,这就是造成内存泄漏的原因,而且许可证不是你这样用的,多个线程 ...

我把线程句柄去掉了  效果一样的 哥  我测试了  我的许可证不是程序集变量吗?全局 和 程序集 应该是一个共享的吧
作者: 1752328925    时间: 2024-2-26 12:55
1752328925 发表于 2024-2-26 12:49
我优化一下

看下这个

网页访问对象bug.e

1.07 MB, 下载次数: 5, 下载积分: 精币 -2 枚


作者: 曼巴精神8    时间: 2024-2-26 12:56
ASSHOLE 发表于 2024-2-26 12:45
你的代码中获取了线程句柄又不手动释放,这就是造成内存泄漏的原因,而且许可证不是你这样用的,多个线程 ...

哥  有没有具体的代码demo
作者: 1752328925    时间: 2024-2-26 13:03
曼巴精神8 发表于 2024-2-26 12:46
哥程序直接崩了

你看下用原生的怎么写吧,拿着个代码改吧改吧

超级列表多线程.e

4.86 KB, 下载次数: 4, 下载积分: 精币 -2 枚


作者: 曼巴精神8    时间: 2024-2-26 13:12
1752328925 发表于 2024-2-26 12:55
看下这个

一样的哥
作者: 北惜    时间: 2024-2-26 14:12
你这个问题我之前写过,你有没有想过 在你这个3-5分钟里你的线程执行了多少次,一般访问对象之后会直接释放或者说没有内存占比,多线程同时进行的时候你来存这个返回的数据时可能会导致内存溢出建议加许可证
作者: 曼巴精神8    时间: 2024-2-26 16:18
北惜 发表于 2024-2-26 14:12
你这个问题我之前写过,你有没有想过 在你这个3-5分钟里你的线程执行了多少次,一般访问对象之后会直接释放 ...

增加了 哥 您看下
作者: 曼巴精神8    时间: 2024-2-26 16:18
北惜 发表于 2024-2-26 14:12
你这个问题我之前写过,你有没有想过 在你这个3-5分钟里你的线程执行了多少次,一般访问对象之后会直接释放 ...

您说的这些我都明白 关键是怎么改
作者: 北惜    时间: 2024-2-26 17:47
怎么联系

作者: djfy2022    时间: 2024-2-26 19:48
曼巴精神8 发表于 2024-2-26 12:29
他们都不建议

假如:电脑分配给你的这个软件2M的内存,而你的软件实际用了1M内存这叫内存泄露
而你的软件实际用了2M内存,结果循环运行一次后再循环运行一次需要2.1M这叫消耗内存
你的软件循环运行一次后光所取不吐出来“释放”内存
总有时候导致你的软件卡死的
所以在每个循环尾上加个优化内存“释放”内存就解决了
不相信自己可以搞个循环测试,查看【任务管理器】内存使用率情况
加个优化内存和不加个优化内存的区别
我刚学习易语言的时候
也遇见软件卡死直接关闭
尤其是访问网络的

作者: jingyi11023995    时间: 2024-2-27 09:40
许可证的使用错误了,不是这样用的,只需要创建一次,后面使用,而不是不停的创建。
网页访问对象没有bug.e (143.45 KB, 下载次数: 7)


补充内容 (2024-2-27 09:42):
我这样写,测试没问题了

补充内容 (2024-2-27 09:46):
了为减少附件体积,精易模块删除了,请自行添加后再测试。
作者: pptk    时间: 2024-3-5 11:24
你这个代码里边 为什么要给网页访问对象加许可证,你这个100毫秒创建一个线程,但是你线程里边又造成了拥堵,网页访问对象15秒超时,相当于你其他创建的线程都在等前一个15秒后才会执行。你内存增加是因为你线程创建在持续增加。




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