关于SetProcessWorkingSetSize方法的疑问 内存泄露
三五月儿 2015-10-26 03:17:09 使用SetProcessWorkingSetSize方法可以将进程占用的物理内存换出到虚拟内存中,这样做的好处是什么呢?难道就是为了换来程序消耗的内存很小的假象吗?
使用SetProcessWorkingSetSize方法是否可以解决程序因内存不足而导致崩溃的问题呢?
通过查阅资料,个人对这个方法持怀疑态度:因为网上资料说,该方法只是暂时的将应用程序占用的内存移至虚拟内存,一旦,应用程序被激活或者有操作请求时,这些内存又会被重新占用。所以我认为,就算将部分内存交换至虚拟内存,只要程序被使用,它占用的内存又会回到原点,所以该崩溃还是会崩溃。这样认为对吗?
另外,这个方法还存在频繁进行内存和硬盘间的页面交换而导致性能下降的风险,那么真想不出这个方法到底有什么好处了?
另外,微软提供了一个empty.exe程序也可以完成将进程占用的物理内存换出到虚拟内存的工作,它与SetProcessWorkingSetSize方法又有哪些不同呢?
我们现在在维护一套以前开发的系统,内存上涨极其明显,使用一段时间后便会崩溃,log中会提示没有足够使用的内存。但是我们现在的机器都是4个G,并且没有运行其他什么程序,而程序往往消耗内存5,6百兆的时候(我知道这已经是很大的消耗了,但是相对总内存还是可以接受的)就会崩溃,看看此时的使用量也就40%左右,为什么程序也会崩溃呢?不知道操作系统是根据什么来决定程序崩溃的,是不是程序请求的内存无法被满足时就会崩溃,但是每次还剩2个多G的内存就满足不了程序的需要了吗?当然,我知道程序崩溃的根本原因还是内存泄露,有没有什么好的方法或者工具来定位内存泄露呢?另外,我是否可以修改程序的某些属性,使程序不要在使用内存5,6百兆的时候就崩溃,而是让他再撑一段时间呢,也就是调高某个值?