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