我们不得不使用CoFreeUnusedLibrariesEx修复使用MSXML库后未清除堆的错误 请参考此链接: http://blogs.msdn.com/b/marcelolr/archive/2008/11/13/msxml-heaps-not-being-released.aspx
但这引起了TTimers的另一个问题,当Delphi应用程序被弹回并在一段时间后再次显示时,它会显示并消失。
这个应用程序使用TTimers安排它的工作就像运行XML转换一样。
以下是问题: 当调用TTimer.Enable时,它会抛出一个错误,但没有足够的Timer可用。 我知道这是一个蒙面错误,我必须弄清楚如何得到实际的错误。
这是一个只有一个计时器的单线程应用程序。
以下是我查看过的链接 最常见的原因似乎是无效的Windows句柄 https://groups.google.com/forum/#!topic/borland.public.delphi.winapi/UrIskaFZggU
还有其他线程表明操作系统耗尽了TIMERS的资源我不确定这是否与我相关。
我只是想了解CoFreeUnusedLibrariesEx和TTimers之间的交互是什么,它逐渐有些掠夺资源,让我们反弹应用程序以使其正常工作。
我如何解决这个问题,我正在寻找一些方向?
答案 0 :(得分:1)
CoFreeUnusedLibrariesEx不应该影响TTimers。但是如果加载和卸载(buggy)dll会泄漏任何用户对象(包括定时器,窗口句柄......),那么我可以想象你用完了用户对象。
使用Windows任务管理器并对其进行配置,以便显示"用户对象"在"流程"标签。然后在调用CoFreeUnusedLibrariesEx时以及不调用CoFreeUnusedLibrariesEx时比较用户对象的数量。