【问题标题】:Memory Leak using TIDNotify , threadsafe VCL interaction使用 TIDNotify 的内存泄漏,线程安全的 VCL 交互
【发布时间】:2012-11-21 22:01:51
【问题描述】:

以下代码用于允许来自 INDY 10 tcpserver.onexecute() 的线程安全 VCL 交互;

///  a function to write information into a TBitmap 
TVclNavigationImage= procedure( ll, ur, ll_v , ur_v : TPoint ) of object;

TVCLUpdateNotify = class(TIdNotify)
 protected
 f_ll, f_ur, f_ll_v , f_ur_v  : TPoint;
 FProc: TVclNavigationImage;
 procedure DoNotify; override;
 public
 constructor Create(ll, ur, ll_v , ur_v : TPoint; aProc:TVclNavigationImage); reintroduce;
 class procedure UpdateNavigationWindow(ll, ur, ll_v , ur_v : TPoint ; aProc: TVclNavigationImage);
 end;

 class procedure TVCLUpdateNotify.UpdateNavigationWindow(ll, ur, ll_v , ur_v : TPoint ; aProc: TVclNavigationImage);
 begin
 with Create(ll, ur, ll_v , ur_v, aProc) do
     begin
     Notify;
     end;
end;

在 Onexecute 函数中有

procedure TForm1.IdTCPServerExecute(AContext: TIdContext);
begin
    ....
    TVCLUpdateNotify.UpdateNavigationWindow(....)
    ....
 end;

根据 MA​​DSHI 调试器,serveronexecute() 中的这行代码正在造成内存泄漏。我的班级里没有免费的功能。如何使该代码无内存泄漏?

【问题讨论】:

  • 为了大家的眼睛,请修正你的问题的标题!
  • 看起来 TIdNotify 是异步的。这意味着释放它是框架的工作。在进行了几次网络搜索之后,似乎确实有一些 Indy 版本存在导致内存泄漏的 TIdNotify 错误。但我对此不太确定,对印地一无所知。无论如何,也许您使用的是旧版本的 Indy,它只是泄漏。例如:indy.codeplex.com/workitem/22030

标签: delphi memory memory-leaks indy


【解决方案1】:

确保您使用的是最新版本的 Indy 10。在旧版本中,TIdNotify 确实存在内存泄漏,但该问题已在 10 个月前修复。

【讨论】:

  • 我现在对 DELPHGI XE2 服务包 4 进行了更新。该错误仍然存​​在。如果我删除免费我会遭受内存泄漏与免费我得到随机/频繁的访问冲突,因为免费是在我的绘画程序完成之前执行的
  • IDE 附带的 Indy 10 版本不是可用的最新版本。由于随着时间的推移在 Indy 中进行的界面更改,Embarcadero 不能在 IDE 更新中包含较新的 Indy 版本,只能包含主要版本。我建议制作 IdSync.pas 的本地副本,更改其单元名称和类名称,然后将其添加到您的项目中。然后,您可以使用 Indy 的 SVN 中包含内存泄漏修复程序的最新代码对其进行修补。
  • TIdNotify 是异步的,你不能手动调用Free() 。您必须让它正常执行,并在完成后自行调用Free()。如果你切换到TIdSync,你可以在上面调用Free(),因为它是同步的。但是要知道同步会阻塞调用线程,如果你在服务器关闭时调用它会引入一个死锁点。
  • 我在从 svn.atozed.com:444/svn/Indy10 下载时遇到了麻烦,是否有 INDY 10 的替代 SVN
  • 那个 SVN 链接对我来说很好用。您是否阅读了Indy Via SVN 的说明?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-29
  • 2013-12-18
  • 2016-04-23
相关资源
最近更新 更多