我们正试图弄清楚我们的软件中是否存在内存泄漏。所以,我一直在使用各种工具和程序来帮助我找到可能的内存泄漏。我使用的软件之一是 AQTime。由于它与 Delphi XE 一起提供,它只是一个演示。所以,我真的无法从中获得任何有用的信息。然后,我决定使用免费软件 MemProof。到目前为止,它向我展示了我们软件的许多需要注意的问题。其中之一是错误。
一旦我通过 MemProof 启动我的程序,它就会列出 2 个错误,它们试图从单元文件 system.pas 中销毁不存在的对象。因此,当我实际上在 TObject.Free 过程中放置一个断点时,它甚至在我的程序一直启动之前就中断了。通过 system.pas 中的 Free 过程,我发现 TIconimage 正在尝试破坏或释放自身。换句话说,在实际启动之前,不会从我的程序中调用免费过程。
这是实际的免费程序:
procedure TObject.Free;
begin
if Self <> nil then
Destroy;
end;
在那次观察之后,我删除了断点,让程序一直运行。我的程序主窗口弹出准备用户输入。但是,我还发现如果我的程序窗口的任何部分显示在屏幕上,就会不停地调用 TObject.Free 过程。我完全不明白。这是为什么?谁能解释一下?当 TForm 显示在屏幕上时,程序不断被调用,TForm 与任何形状或形式的 TObject.Free 有什么关系?
提前致谢。