开发日志【4】程序运行后内存占用持续增加,最终崩溃退出:
用定时器重复执行刷新数据,不做存储,程序运行后内存占用持续增加,最终崩溃退出。
原因分析:
通过分析,发现是定时器函数持续刷新数据所致。
解决方案:
通过查找,发现采用SetProcessWorkingSetSize()函数,可以将物理内存数据转移到虚拟内存中,虽然不能从根本上解决数据增加的问题,但可以很快捷地解决物理内存占用过快增加的问题。通过在定时器函数中添加SetProcessWorkingSetSize()函数,程序占用内存改善明显。具体方法:
'先声明函数,注意32位和64位需要修改integer和long类型。
Public Declare Function SetProcessWorkingSetSize Lib “kernel32” Alias “SetProcessWorkingSetSize” (ByVal hProcess As Integer, ByVal dwMinimumWorkingSetSize As Integer, ByVal dwMaximumWorkingSetSize As Integer) As Integer
‘在TimerUpdateTime_Tick()函数的尾部添加调用
SetProcessWorkingSetSize(System.Diagnostics.Process.GetCurrentProcess.Handle, -1, -1)
内存占用着增加的问题改善明显。
参考:
https://blog.csdn.net/zougangx/article/details/5939099?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-5939099-blog-18844453.pc_relevant_antiscanv3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-5939099-blog-18844453.pc_relevant_antiscanv3&utm_relevant_index=2