我目睹了一个Delphi 6程序,该程序在函数内使用FindFirst()
中的SysUtils
。这是一个运行数月并执行此操作数百次的程序。令人惊讶的是,FindClose()
没有被调用,没有任何不好的事情发生。
如果我理解正确,该程序似乎泄漏文件句柄。 (在TSearchRec
记录中有一个THandle
条目。整个记录被丢弃,THandle
未关闭。事情是似乎没有问题。我使用了sysinternal的进程资源管理器,并且没有看到FindFirst
找到的文件的打开文件句柄。
任何解释?
答案 0 :(得分:9)
如上所述,您的程序会泄漏句柄。如果您在未随后调用FindFirst
的情况下致电FindClose
,则会泄漏句柄。做到这一点,程序将耗尽可用的句柄对象并失败。
你没有看到这表明你还没有达到极限。您没有观察到Process Explorer的泄漏,这表明您没有查看正确的信息。或者您可能完全错误地诊断了问题,并且未调用泄漏的代码,或者调用了FindClose
,但您还没有找到它。
您应该修复代码,而不是花费更多时间分析它。最重要的是,除非您通过调用FindFirst
来调用FindClose
,否则您的程序会泄漏。