在delphi中查找关闭

时间:2016-04-08 13:50:04

标签: delphi

我目睹了一个Delphi 6程序,该程序在函数内使用FindFirst()中的SysUtils。这是一个运行数月并执行此操作数百次的程序。令人惊讶的是,FindClose()没有被调用,没有任何不好的事情发生。

如果我理解正确,该程序似乎泄漏文件句柄。 (在TSearchRec记录中有一个THandle条目。整个记录被丢弃,THandle未关闭。事情是似乎没有问题。我使用了sysinternal的进程资源管理器,并且没有看到FindFirst找到的文件的打开文件句柄。

任何解释?

1 个答案:

答案 0 :(得分:9)

如上所述,您的程序会泄漏句柄。如果您在未随后调用FindFirst的情况下致电FindClose,则会泄漏句柄。做到这一点,程序将耗尽可用的句柄对象并失败。

你没有看到这表明你还没有达到极限。您没有观察到Process Explorer的泄漏,这表明您没有查看正确的信息。或者您可能完全错误地诊断了问题,并且未调用泄漏的代码,或者调用了FindClose,但您还没有找到它。

您应该修复代码,而不是花费更多时间分析它。最重要的是,除非您通过调用FindFirst来调用FindClose,否则您的程序会泄漏。