【发布时间】:2010-10-13 18:25:23
【问题描述】:
我创建了一个小型多线程应用程序,我正在尝试将其转换为使用 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;
为什么在多次运行任务时会出现内存泄漏? 带有 FastMM4 的 Delphi 2010 最新的 Virtualtreeview 和 OTL
【问题讨论】:
-
创建一个展示此行为的小程序并将其发布到 OTL 论坛 (otl.17slon.com/forum)。我随时为您提供帮助。
-
我打算在你的论坛上发帖,但我很确定这是虚拟树视图的问题,而事实证明问题出在 VTreeview 上。顺便说一句,谢谢你的 OTL
标签: delphi virtualtreeview omnithreadlibrary