在delphi中查找关闭

Spy*_*nos 4 delphi

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

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

任何解释?

Dav*_*nan 9

如上所述,您的程序泄漏句柄.如果你打电话FindFirst没有随后打电话FindClose,你就会泄漏句柄.做到这一点,程序将耗尽可用的句柄对象并失败.

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

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