可能不是"泄漏"内存,而是更多地"囤积"内存。只有在应用程序无法释放内存时,内存才会泄漏,例如在指针丢失后。 当创建对象时就会占用内存,并在销毁对象时(或者如果对象被覆盖为新对象时丢失)释放内存。内存泄漏是指内存从未被释放(在应用程序关闭后)。可能是应用程序运行期间某个对象未被释放,但如果将该对象添加到对象列表或数组中,则该列表/数组会继续增长(而不是覆盖)。如果这些对象由应用程序拥有,则在应用程序关闭时它们会自动释放,但直到应用程序关闭之前都不会释放。FastMM没有报告任何内存泄漏(因为所有内存在应用程序关闭时都已被释放)。 内存分析器可以显示当前内存中每个对象的数量以及对象类别(我们也使用 AQ Time 进行此操作)。您需要在一小时/两小时/三小时后查看内存概要。大多数长时间运行的应用程序(我所知道的所有应用程序)都具有相当稳定的(长期)内存需求,内存中的每个对象也保持相当稳定。显然,在应用程序繁忙时可能会出现峰值,但这些应该会回到一个稳定的水平。查看是否有任何对象计数在持续增长。 我猜测应用程序动态创建了某个具有窗体或应用程序作为其父级的内容,并将其添加到列表末尾,但未释放它。该对象一直存在于内存中,直到应用程序关闭,但每个新对象都需要更多的内存。
- James Barrass
4
谢谢JamesB。我会下载AQ Time并查看是否能给我更多信息。 - JD.
1“泄漏”是指内存在应用程序关闭后从未被释放。我认为在任何现代操作系统上,除非有来自错误驱动程序或单独应用程序的帮助(例如通过与其通信触发该应用程序中的泄漏),否则不可能实现这一点。一旦进程终止,它分配的所有内存都将被释放。 - Mihai Limbășan