春暖花开
雪化了,花开了,春天来了
posts - 149,comments - 125,trackbacks - 0
如何释放内存?

这里,我不是简单的new后要delete.是对于系统而言,我怎么做到释放内存呢?让系统的可用内存变大.从网上也看到了许多释放内存的软件,很惊异它们是如何做到的呢?

有人建议我申请一大块控件,系统不够分配了,会引起它自己去整理内存.试了一下,似乎效果不是很好.
还有人建议,这么用,向所有窗口发送一个WM_HIBERNAT消息.
PostMessage(HWND_BROADCAST, WM_HIBERNATE, 0, 0);
似乎效果也不是很好.

有没有很好的方法处理这个问题呢?

大家知道的话,指点一下啊!

万分感谢!
posted on 2009-02-23 19:18 Sandy 阅读(2893) 评论(5)  编辑 收藏 引用 所属分类: windows学习

FeedBack:
# re: 疑问: 如何释放内存??
2009-02-23 20:23 | 微妙的平衡
API: SetProcessWorkingSetSize
可以设置进程工作最小和最大的内存空间,保留基本需要的内存大小。

但实际并不能提高太多的性能。

具体的原理你可以google一下。  回复  更多评论
  
# re: 疑问: 如何释放内存??
2009-02-23 20:24 | gussing
市面上那些所谓的内存整理工具的原理都是这样的:申请一块很大的内存,然后释放
详见《windows internal》 第三章和内存管理一章  回复  更多评论
  
# re: 疑问: 如何释放内存??
2009-02-24 09:29 | Sandy
@gussing
《windows internal》是不是Windows核心编程呢?

还有申请一块很大的内存,是指虚拟内存,还是物理内存呢?

现在有些更疑惑了.  回复  更多评论
  
# re: 疑问: 如何释放内存??
2009-02-24 09:29 | Sandy
@微妙的平衡
谢谢,我尝试一下  回复  更多评论
  
# re: 疑问: 如何释放内存??
2009-02-24 10:36 | megax
基本上就是楼上的,申请大内存,造成当前应用程序的内存被放入虚拟内存,这样看起来可用内存就多了,不过很显然,整个系统的性能剧烈下降。所以市面上那些号称释放内存的软件,纯粹是JB骗人的,我用过好几个,还有哪些号称智能的,在你切换进程的时候,反映是非常慢,特别像Firefox,Notes这样的软件  回复  更多评论
  
# re: 疑问: 如何释放内存??
2009-02-24 13:24 | Sandy
查了一下SetProcessWorkingSetSize

http://www.vbgood.com/viewthread.php?tid=46136&extra=&page=3
里面有关于这个函数的激烈讨论,大多数人也都认同
“因为他只是暂时的将应用程序占用的内存移至虚拟内存,一旦,应用程序被激活或者有操作请求时,这些内存又会被重新占用.如果你强制使用该方法来设置程序占用的内存,那么可能在一定程度上反而会降低系统性能,因为系统需要频繁的进行内存和硬盘间的页面交换.”

还有两篇文章,是
windows平台一个程序究竟占用多少内存?
http://blog.csdn.net/jaminwm/archive/2006/11/18/1394993.aspx

关于 SetProcessWorkingSetSize 和内存释放
http://hi.baidu.com/taobaoshoping/blog/item/a1f6baf52d523a21bd3109f5.html

看来还需要慎用该函数。

此外,我连用的机会都没有!我是想在windows mobile上来实现释放内存来实现优化系统的功能。然后他却没有这个函数。

不过,谢谢大家指点。

有建议继续提!
  回复  更多评论
  

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理