开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 3405|回复: 114
收起左侧

[易语言纯源码] ✅当前进程 > 调用虚拟内存✅不再为占用内存过高烦恼了✅

[复制链接]
回帖奖励 70 枚 精币 回复本帖可获得 2 枚 精币奖励! 每人限 1 次(中奖概率 80 %)
结帖率:100% (11/11)
发表于 2025-8-23 21:56:37 | 显示全部楼层 |阅读模式   广东省茂名市
分享源码
界面截图:
是否带模块: 纯源码
备注说明: -

不知什么原因,用了不少winhttpapi等等http访问类时。。。
在高频使用时内存都是每秒0.1mb左右增长,直到超2GB崩...

内存泄漏?
只是系统的api也不应该呀,各种释放也是调了,都没效果。。

于是想着把这些内存转换到虚拟内存中去了,之后让虚拟内存慢慢释放好了
至少应用不会因为用超2GB弹出




这种屁事了吧?

好了,废话不多说,上代码

api dll
  
DLL命令名返回值类型公开备 注
GlobalMemoryStatus 释放内存,查询系统当前的内存状态(总物理内存、可用物理内存、虚拟内存使用情况等
DLL库文件名:
 
在DLL库中对应命令名:
GlobalMemoryStatus
参数名类 型传址数组备 注
lpBufferMEMORYSTATUS
DLL命令名返回值类型公开备 注
OpenProcess整数型 释放内存,打开一个进程,获取进程句柄(需指定权限),用于后续操作该进程
DLL库文件名:
 
在DLL库中对应命令名:
OpenProcess
参数名类 型传址数组备 注
dwDesiredAccess整数型权限(如:0x1F0FFF 表示所有权限)
bInheritHandle整数型是否继承句柄(0=不继承)
dwProcessId整数型进程ID(当前进程用 GetCurrentProcessId())
DLL命令名返回值类型公开备 注
SetProcessWorkingSetSize逻辑型 释放内存,调整进程的工作集大小(工作集是进程当前驻留在物理内存中的页面集合
DLL库文件名:
 
在DLL库中对应命令名:
SetProcessWorkingSetSize
参数名类 型传址数组备 注
hProcess整数型进程句柄(通过OpenProcess获取)
lpMinimumWorkingSetSize整数型最小工作集大小(-1=使用默认)
lpMaximumWorkingSetSize整数型最大工作集大小(-1=使用默认)
DLL命令名返回值类型公开备 注
CloseHandle2 释放内存,关闭通过 OpenProcess 等 API 获取的句柄,释放系统资源(必须调用,否则泄漏)
DLL库文件名:
 
在DLL库中对应命令名:
CloseHandle
参数名类 型传址数组备 注
hObject整数型要关闭的句柄
DLL命令名返回值类型公开备 注
GetCurrentProcessId整数型 释放内存,获取当前进程ID
DLL库文件名:
kernel32.dll
在DLL库中对应命令名:
GetCurrentProcessId
参数名类 型传址数组备 注



数据类型
  
数据类型名公开备 注
MEMORYSTATUS 释放内存
成员名类 型传址数组备 注
dwLength整数型 结构大小(必须初始化)
dwMemoryLoad整数型 内存使用率(0-100)
dwTotalPhys长整数型 总物理内存(字节)
dwAvailPhys长整数型 可用物理内存(字节)
dwTotalPageFile长整数型 总虚拟内存(字节)
dwAvailPageFile长整数型 可用虚拟内存(字节)
dwTotalVirtual长整数型 总虚拟地址空间(字节)
dwAvailVirtual长整数型 可用虚拟地址空间(字节)



调用函数
  
子程序名返回值类型公开备 注
NX_释放当前进程物理内存逻辑型 强制当前进程释放未使用的物理内存到虚拟内存
变量名类 型静态数组备 注
hProcess整数型 
pid整数型 
结果逻辑型 
' 1. 获取当前进程ID
pid = GetCurrentProcessId ()
' 2. 打开当前进程(需要调整工作集的权限)
hProcess = OpenProcess (2035711, 0, pid)  ' 0x1F0FFF 是所有权限
如果真 (hProcess = 0)
调试输出 (“打开进程失败”)
返回 ()

' 3. 强制释放物理内存(将最小和最大工作集设为-1,触发系统清理)
' 原理:让系统将当前未使用的物理内存页写入虚拟内存,释放物理内存
结果 = SetProcessWorkingSetSize (hProcess, -1, -1)
' 4. 关闭进程句柄(必须执行,否则句柄泄漏)
CloseHandle2 (hProcess)
返回 (结果)


i支持库列表   支持库注释   
spec特殊功能支持库


以上源码添加到你应用中即可,在适当的位置
NX_释放当前进程物理内存 ()
添加调用即可

另外:nx线程连接池php中间件,已有更新

点评

先不崩再说,能坚持几小时或更久的使用就行,硬盘坏不坏又不是一天半天的事,哈。。现在硬盘可没那么脆   广东省茂名市  发表于 5 天前
意味着你的硬盘将每秒将 I/O 大量数据,硬盘寿命被影响.   辽宁省沈阳市  发表于 5 天前
如果***使用该方法来循环设置程序内存,可能在一定程度上反而会降低系统性能,因为系统需要频繁的进行内存和硬盘间的数据交换,   辽宁省沈阳市  发表于 5 天前
SetProcessWorkingSetSize 只是暂时将程序占用内存移至虚拟内存,一旦程序被激活或者有操作请求时,这些内存又会被重新占用.   辽宁省沈阳市  发表于 5 天前
代修bug狂喜, 这篇帖子会给代修bug的增加很多潜在用户   广西壮族自治区南宁市  发表于 7 天前
再怎么往虚拟内存搬,只要不释放,它占用的地址空间,还是占用。32位用户模式占用了2G,就申请不了了   香港特别行政区*  发表于 2025-8-26 12:27
理论上就不对!这只是调和物理内存和虚拟内存,超过2G崩溃是地址空间不够了,不是物理内存不够了   香港特别行政区*  发表于 2025-8-26 12:25
https://bbs.ijingyi.com/thread-14843336-1-1.html   浙江省温州市  发表于 2025-8-25 11:15
SetProcessWorkingSetSize (-1, -1, -1) 加到时钟 五六分钟一次 爽歪歪 运行一个月了没死过   浙江省温州市  发表于 2025-8-25 11:13
SetProcessWorkingSetSize (-1, -1, -1) 原来这样又代表当前进程,可是昨晚ai为啥给我弄得复杂呢,还要取当前进程取所有权限...   广东省茂名市  发表于 2025-8-24 22:23
而且 只对当前应用进行优化,所以对硬盘来说是微不足道,再加上每间隔一段时间才优化一次   广东省茂名市  发表于 2025-8-24 18:04
不要太频繁就行,比如 1分钟以上,执行一次   广东省茂名市  发表于 2025-8-24 18:02
SetProcessWorkingSetSize (-1, -1, -1) 是调整所有进程,没有只调整当前应用的进程效果好,也不影响别的进程   广东省茂名市  发表于 2025-8-24 12:56
直接 SetProcessWorkingSetSize (-1, -1, -1) 不就行了   广西壮族自治区南宁市  发表于 2025-8-24 12:51

评分

参与人数 1精币 +1 收起 理由
cui870222829 + 1 感谢分享,很给力!~

查看全部评分


签到天数: 3 天

发表于 8 小时前 | 显示全部楼层   重庆市重庆市

回帖奖励 +2 枚 精币

感谢分享,学习学习
回复 支持 反对

使用道具 举报

结帖率:100% (9/9)

签到天数: 4 天

发表于 前天 17:39 | 显示全部楼层   广东省佛山市

回帖奖励 +2 枚 精币

        感谢分享,很给力!~
回复 支持 反对

使用道具 举报

签到天数: 4 天

发表于 前天 13:48 | 显示全部楼层   安徽省合肥市
666666666644444444444444
回复 支持 反对

使用道具 举报

签到天数: 2 天

发表于 3 天前 | 显示全部楼层   山西省朔州市
66666666666666666
回复 支持 反对

使用道具 举报

签到天数: 2 天

发表于 3 天前 | 显示全部楼层   山西省朔州市
666666666666666666
回复 支持 反对

使用道具 举报

签到天数: 2 天

发表于 3 天前 | 显示全部楼层   山西省朔州市

回帖奖励 +2 枚 精币

哈哈哈哈哈哈哈哈哈
回复 支持 反对

使用道具 举报

签到天数: 2 天

发表于 4 天前 | 显示全部楼层   山西省朔州市
66666666666666666666666666666666
回复 支持 反对

使用道具 举报

签到天数: 2 天

发表于 4 天前 | 显示全部楼层   河北省石家庄市
看不太懂
回复 支持 反对

使用道具 举报

签到天数: 1 天

发表于 4 天前 | 显示全部楼层   云南省红河哈尼族彝族自治州

回帖奖励 +2 枚 精币

好,太好了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备2025452707号) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表