我从一位离开公司的程序员那里接手了一个非常大的子系统,首要任务是防止进程耗尽内存。
基本上,这是一个数据集的循环,其中我们创建和销毁一个数据模块,该模块会执行大量工作。只要创建此数据模块,您就可以在任务管理器中看到内存使用情况一直在上升,直到它崩溃。我似乎记得几年前读过一篇文章,说不应该完全信任任务管理器报告的内容,因为这些值只是估计值,而不是实时值。所以我正在寻找替代方案。
以下是我尝试过的方法:
1. 在我的主项目文件中设置ReportMemoryLeaksOnShutdown := True,但它没有返回任何结果。因此,它要么不监视动态加载的包中泄漏的内存,要么是在应用程序关闭之前释放了内存。
2. AQTime。这被认为是一个非常棒的产品,但我发现它完全不起作用。如果我使用分配分析器,我最终会得到数百行不包含任何有用信息的结果。只是一个内存地址、大小和类似于“VCL标准分配”的东西。它据说可以按例程分解信息,但我只得到了一个平面列表,没有例程信息。所以我认为它不起作用。
是否有其他工具可以帮助我跟踪分配并未释放的内存?我一直在随处注释功能的小部分,以查看问题消失的地方,并检查所有明确分配的内容是否被释放,但我仍然有一个泄漏问题,这可能是一个相当令人沮丧的过程。
基本上,这是一个数据集的循环,其中我们创建和销毁一个数据模块,该模块会执行大量工作。只要创建此数据模块,您就可以在任务管理器中看到内存使用情况一直在上升,直到它崩溃。我似乎记得几年前读过一篇文章,说不应该完全信任任务管理器报告的内容,因为这些值只是估计值,而不是实时值。所以我正在寻找替代方案。
以下是我尝试过的方法:
1. 在我的主项目文件中设置ReportMemoryLeaksOnShutdown := True,但它没有返回任何结果。因此,它要么不监视动态加载的包中泄漏的内存,要么是在应用程序关闭之前释放了内存。
2. AQTime。这被认为是一个非常棒的产品,但我发现它完全不起作用。如果我使用分配分析器,我最终会得到数百行不包含任何有用信息的结果。只是一个内存地址、大小和类似于“VCL标准分配”的东西。它据说可以按例程分解信息,但我只得到了一个平面列表,没有例程信息。所以我认为它不起作用。
是否有其他工具可以帮助我跟踪分配并未释放的内存?我一直在随处注释功能的小部分,以查看问题消失的地方,并检查所有明确分配的内容是否被释放,但我仍然有一个泄漏问题,这可能是一个相当令人沮丧的过程。