我们有一个虚拟内存上升并持续一天以上的应用程序.两天后,它已攀升至约500MB. 我已经尝试分析了命中数据库的应用程序以及大量的http和soap请求,但我Fastmm4显示没有泄漏. 我不确定如何
我已经尝试分析了命中数据库的应用程序以及大量的http和soap请求,但我Fastmm4显示没有泄漏.
我不确定如何或何时声称内存以及虚拟内存上升是否存在问题?
JD
它可能不是“泄漏”记忆,而是更“囤积”它.在应用程序无法释放内存之前,内存不会泄露.例如在它的指针丢失之后.在创建对象时声明内存,并在对象被销毁时释放(或者如果对象被新对象覆盖则丢失).泄漏是指从未释放内存(应用程序关闭后).
可能是在应用程序运行期间未释放对象的情况,但如果将对象添加到对象的列表或数组中,则列表/数组只会保持增长(而不是覆盖),如果对象归对象所有.应用程序关闭时它们自动释放的应用程序,但直到应用程序关闭,FastMM没有任何报告,因为没有内存泄漏(当应用程序关闭时它已全部免费)
Memory Profiler可以显示当前在内存中的每个对象的数量以及Objects类(我们也使用AQ Time来执行此操作).您需要在一小时/ 2小时/ 3小时后查看内存配置文件.大多数长时间运行的应用程序(我所知道的)具有相当恒定(长期)的内存要求,并且内存中的每个对象也保持相当稳定.显然,应用程序繁忙时可能会出现峰值,但这些应该会恢复到稳定水平.看看是否有任何对象数量在不断增长.
我敢打赌,应用程序是动态创建一个表单或应用程序作为它的父级,在列表的末尾添加它,而不是释放它.对象位于内存中,直到应用程序关闭,但每个新对象需要更多内存.