关于wince内存泄漏和清理系统内存!

因为测试时间很长,可能几天。测试数据要画成曲线出来,结果看到偶尔就有4K字节的内存泄漏。wince系统也不会回收。
想问问wince有没有类似SetProcessWorkingSetSize函数,可以清理一下内存的函数。SetProcessWorkingSetSize这个函数wince用不了。

网络上说wince的GDI函数有泄漏。基本上我都按照大家建议的尝试过了,有改善,但是依然看到wince的内存不断变大。
如果大家有什么好想法也提提。
谢谢了!

分数不多,若有解决办法再另外发帖感谢大家。
...全文
471 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
确实是ms的bug。mfc封装gdi有问题吧。后来直接掉用纯API,或者有些函数用类似的代替基本就好了。
剩下的是wince的内存机制引起。只能优化。
91program 2012-02-09
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 northcan 的回复:]

4KB,4KB的减少,这可能是系统bug了。
[/Quote]

系统Bug?

还是多怀疑自己的程序吧!
帮帮你我她 2012-02-08
  • 打赏
  • 举报
回复
XP下我是这样清理的

'暂时的将应用程序占用的内存移至虚拟内存,一旦,应用程序被激活或者有操作请求时,这些内存又会被重新占用
Private Declare Function SetProcessWorkingSetSize Lib "kernel32.dll" (ByVal procHandle As IntPtr, ByVal min As Int32, ByVal max As Int32) As Boolean
Private Declare Function EmptyWorkingSet Lib "psapi.dll" (ByVal hwProc As IntPtr) As Integer


Sub Clear_Mem_Xp()
'-----减少自己的内存占用
Try
SetProcessWorkingSetSize(GetCurrentProcess, -1, -1) '减少vb.net应用程序占用的物理内存数值
EmptyWorkingSet(GetCurrentProcess) '释放进程的内存
Catch
End Try

'-----减少自己的内存占用
帮帮你我她 2012-02-08
  • 打赏
  • 举报
回复
另外内存清理,你可以尝试这个

PostMessage(hWnd, &H3FF, IntPtr.Zero, IntPtr.Zero)
帮帮你我她 2012-02-08
  • 打赏
  • 举报
回复
用俺的通用升级程序吧,在我资源里可以下载,他功能非常多,
修改一下他的XML文件,对应上你的程序文件名,和程序标题名,就可以帮你处理
你的内存了,你所做的只需,定时(20S以上吧,相信你的程序可以坚持运行20S以上吧)执行一次
那个 升级.EXE ,就可以了...
他会停止运行你的EXE,然后再运行你的EXE,然后停止自己,这样你的程序可以得到彻底初始化,
从而不怕内存泄露,让你的程序,永远正常运行,呵呵,其余功能自己摸索吧。。
顾名思义,可以帮你在线远程升级并自动运行的。
  • 打赏
  • 举报
回复
发现CString好像问题比较大。
有个CString m_strRxData。
m_strRxData的长度到了8k就会清空。
其它时间从串口接收数据,然后把数据解析后显示出来。
所以不断有m_strRxData += strTemp;代码。strTemp就是解析后的字符串。
大概每秒一次。发现这样内存小的很快!
91program 2012-02-07
  • 打赏
  • 举报
回复
wince系统也不会回收,这正常,需要你的程序自己处理。

可能是 DC 产生的内存泄露

但会产生内存泄露的,不只是 DC,需要代码分析的。
QQ515311445 2012-02-07
  • 打赏
  • 举报
回复
本人也搞了四年的WinCE感觉GDI没有问题
YUQB 2012-02-07
  • 打赏
  • 举报
回复
注意释放位置,有时候必须hdcmem释放完在释放句柄[Quote=引用 4 楼 accessysq 的回复:]

对于GDI对象都自己释放了,就还是不行。
[/Quote]
YUQB 2012-02-07
  • 打赏
  • 举报
回复
申请内存的地方也可能泄露,还有wince下createDIBsection看看,我以前就在这里引起泄露,句柄释放的时候位置对不对等
woshi_ziyu 2012-02-07
  • 打赏
  • 举报
回复
只能通过代码分析可能的原因
swanmsg 2012-02-07
  • 打赏
  • 举报
回复
俺也遇到过,暂时没啥绝招。
northcan 2012-02-07
  • 打赏
  • 举报
回复
4KB,4KB的减少,这可能是系统bug了。
  • 打赏
  • 举报
回复
对于GDI对象都自己释放了,就还是不行。
qwqwqw408 2012-02-07
  • 打赏
  • 举报
回复
我写了那么多gdi的代码,自认为是安全按照msdn上的要求了, 该注意的都注意了,但是就是会有减少,4K为单位。。
qwqwqw408 2012-02-07
  • 打赏
  • 举报
回复
wince gdi感觉是有泄露,可能也不是泄露,而是缓存起来了,不会很快释放。

19,500

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧