我创建了一个小型多线程应用程序,我正在尝试将其转换为使用 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;
为什么在多次运行任务时会出现内存泄漏?Delphi 2010 与 FastMM4 最新的 Virtualtreeview 和 OTL