易语言里请不要频繁优化内存

易语言里请不要频繁优化内存

易语言中,我们比较熟悉的内存优化API SetProcessWorkingSetSize (-1, -1, -1) 基本上我写的每一个程序都会用到这个命令,采用时钟方式进行工作,后来慢慢的发现,如果长时间允许此命令部分电脑或者是系统会出现内存分配不足的错误,所以在采用相关命令时建议可以在子程序中(下面例子就是这种方式)运行,比如多线程或者线程池中:

.版本 2


.子程序 内存_优化, 逻辑型, 公开,  请把此命令放在"启动窗口创建完毕"中使用;记住:不管你有多少个窗口,只要在"启动窗口创建完毕"中使用一次就行了;
.参数 窗口句柄, 整数型, , 直接用"取窗口句柄()"命令即可,
.参数 优化间隔, 整数型, 可空, 可空,默认为3000毫秒优化一次。

.如果真 (是否为空 (优化间隔) 或 优化间隔 < 1000)
   优化间隔 = 3000
.如果真结束
返回 (时钟_创建 (窗口句柄, “内存_优化”, 优化间隔, &内存优化过程))

.子程序 内存优化过程

SetProcessWorkingSetSize (-1, -1, -1)

.子程序 时钟_创建, 逻辑型, 公开, 创建一个时钟;成功返回真,失败返回假;
.参数 窗口句柄, 整数型, , 直接用“取窗口句柄()”命令取出本窗口句柄即可
.参数 时钟标识文本, 文本型, , 随便输入一些文本,销毁时用来辩认的;
.参数 时钟周期, 整数型, , 时钟周期
.参数 时钟_周期事件, 子程序指针, , 时钟_周期事件

返回 (SetTimer (窗口句柄, 时钟标识文本, 时钟周期, 时钟_周期事件))


.子程序 时钟_销毁, 逻辑型, 公开, 销毁一个时钟;成功返回真,失败返回假;
.参数 窗口句柄, 整数型, , 直接用“取窗口句柄()”命令取出本窗口句柄即可
.参数 时钟标识文本, 文本型, , 创建时用的标识文本

返回 (KillTimer (窗口句柄, 时钟标识文本))


.DLL命令 SetTimer, 逻辑型, "user32.dll", "SetTimer", 公开, 时钟_创建
   .参数 hwnd, 整数型, , hwnd
   .参数 事件标识符, 文本型, , nIDEvent
   .参数 时钟周期, 整数型, , uElapse
   .参数 时钟_周期事件, 子程序指针, , lpTimerFunc

.DLL命令 KillTimer, 逻辑型, "user32.dll", "KillTimer", 公开, 时钟_销毁
   .参数 hwnd, 整数型, , hwnd
   .参数 事件标识符, 文本型, , nIDEvent


.DLL命令 SetProcessWorkingSetSize, 逻辑型, "kernel32", "SetProcessWorkingSetSize"
   .参数 hProcess, 整数型, , 0
   .参数 dwMinimumWorkingSetSize, 整数型, , 0
   .参数 dwMaximumWorkingSetSize, 整数型, , 0