小编Log*_*man的帖子

使用VirtualTreeview和OTL进行内存泄漏

我创建了一个小的多线程应用程序,我试图将其转换为使用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

delphi virtualtreeview omnithreadlibrary

3
推荐指数
1
解决办法
1816
查看次数