使用VirtualTreeview和OTL进行内存泄漏

Log*_*man 3 delphi virtualtreeview omnithreadlibrary

我创建了一个小的多线程应用程序,我试图将其转换为使用OmniThreadLibrary.我正在使用Virtualtreeview显示日志和状态/结果.Vst Log只有两列,记录只包含两个字符串字段(非常简单,记录中没有对象).

使用OTL附带的DEMO项目(线程池#11)我将项目更改为使用VirtualTreeview而不是列表框.当我从演示中"运行任务"时没有内存泄漏,但是如果我不止一次运行"运行任务",就会发生内存泄漏.如果我多次运行任何任务,将发生内存泄漏.如果我根本不使用VirtualTreeView,则任何时候都不会发生内存泄漏.就在我使用VST和任务运行多次时.

我确实使用FreeNode事件并清除字符串,甚至尝试使用Finalize ...

例:

procedure TFormMain.vstLogFreeNode(Sender: TBaseVirtualTree;
  Node: PVirtualNode);
var
  LogData: PTreeLogData;
begin
  LogData:=Sender.GetNodeData(Node);

  if Assigned(LogData) then begin
    LogData^.Msgtype := '';
    LogData^.Msg := '';
  end; 
  //Finalize(LogData^);

end;
Run Code Online (Sandbox Code Playgroud)

当一个任务多次运行时,为什么会出现内存泄漏?Delphi 2010采用FastMM4最新的Virtualtreeview和OTL

Rem*_*mko 11

NodeFree事件仅针对Validated节点调用,验证通常表示一次或多次显示的节点(调用GetText事件时).使用Virtual TreeView组件时请参阅内存泄漏

编辑:您可以通过检查节点计数并计算NodeFree事件被调用的次数来确认.