我有一个GUI应用程序,没有内存泄漏问题。我已经通过FastMM进行了多次测试,并确认了这一点。
在某个特定客户端的服务器上,我会遇到随机崩溃的情况。服务器规格与我们其他客户端的相同(我们实际上尝试过各种硬件),程序使用的文件也是如此(据我所知,有些超级敏感的材料我无法访问,但似乎没有什么异常)。
我尝试过EurekaLog和MadShi等工具,以缩小问题范围,但不幸的是,它们只在偶尔发生崩溃时捕获异常,而不是每次都能捕获。当出现异常时,通常会显示一个或多个“内存不足”的错误,然后才会崩溃。
所以我想也许一些对象被“太晚”释放,即只有在应用程序关闭时才释放,而不是我想要释放它们的时候?我看过FastMMUsageeTracker演示文稿,但并不能真正理解其中的内容。有没有文档可以参考?或者有人能用(比较易懂的)话语告诉我如何检查这个问题?
另外,检测应用程序是否接近其“内存限制”的最佳方法是什么,以便采取一些预防措施?如果我正确理解,一个常规的Delphi应用程序是32位的,它应该可以处理多达2Gb的内存(当然前提是硬件支持),对吗?
PS:Delphi 2009或XE,如果有关的话。
谢谢!
编辑-问题可能已经解决
我们能够找到一个问题,即弹出窗口在一段时间后自动关闭和释放自身的速度远远快于其消失的速度。这会随着时间的推移消耗大量内存,然后任何内存分配基本上都会使其超过极限并触发“内存不足”问题。
这就解释了为什么堆栈跟踪不一致。
我并不完全相信这是我们唯一的问题,因为尽管不太可能,在我们的应用程序运行多年之前可能已经发生过这种情况,但某种程度上它还没有发生。我将在此问题上进行更多的挖掘。
感谢所有回答的人,每个答案实际上都有宝贵的信息。
在某个特定客户端的服务器上,我会遇到随机崩溃的情况。服务器规格与我们其他客户端的相同(我们实际上尝试过各种硬件),程序使用的文件也是如此(据我所知,有些超级敏感的材料我无法访问,但似乎没有什么异常)。
我尝试过EurekaLog和MadShi等工具,以缩小问题范围,但不幸的是,它们只在偶尔发生崩溃时捕获异常,而不是每次都能捕获。当出现异常时,通常会显示一个或多个“内存不足”的错误,然后才会崩溃。
所以我想也许一些对象被“太晚”释放,即只有在应用程序关闭时才释放,而不是我想要释放它们的时候?我看过FastMMUsageeTracker演示文稿,但并不能真正理解其中的内容。有没有文档可以参考?或者有人能用(比较易懂的)话语告诉我如何检查这个问题?
另外,检测应用程序是否接近其“内存限制”的最佳方法是什么,以便采取一些预防措施?如果我正确理解,一个常规的Delphi应用程序是32位的,它应该可以处理多达2Gb的内存(当然前提是硬件支持),对吗?
PS:Delphi 2009或XE,如果有关的话。
谢谢!
编辑-问题可能已经解决
我们能够找到一个问题,即弹出窗口在一段时间后自动关闭和释放自身的速度远远快于其消失的速度。这会随着时间的推移消耗大量内存,然后任何内存分配基本上都会使其超过极限并触发“内存不足”问题。
这就解释了为什么堆栈跟踪不一致。
我并不完全相信这是我们唯一的问题,因为尽管不太可能,在我们的应用程序运行多年之前可能已经发生过这种情况,但某种程度上它还没有发生。我将在此问题上进行更多的挖掘。
感谢所有回答的人,每个答案实际上都有宝贵的信息。