小さなマルチスレッド アプリケーションを作成しましたが、それを変換して OmniThreadLibrary を使用しようとしています。Virtualtreeview を使用して、ログとステータス/結果を表示しています。Vst ログには 2 つの列しかなく、レコードには 2 つの文字列フィールドしか含まれていません (非常に単純で、レコード内にオブジェクトはありません)。
OTL (スレッド プール #11) に付属する DEMO プロジェクトを使用して、リストボックスの代わりに 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 最新の Virtualtreeview と OTL を備えた Delphi 2010