Помогите найти утечку пам"яти... Delphi 10.3 SQLite

работаю с базой sqlite, в 300 потоков... если вставляю в базу уникальные значения то все работает отлично... но если попадаются дубликаты, получается утечка пам"яти в строке SQLConnection1.ExecuteDirect(Query); введите сюда описание изображения

Подозреваю, что я пропустил освобождение какой то переменной, так как утечка памяти в компоненте Delphi мало вероятна)

procedure TMyThread.insertTransaction;
label again;
var
  Transaction: TDBXTransaction;
  SQLConnection1:TSQLConnection;
  Query:string;
  i:integer;
  error:boolean;
begin
again:
try
  SQLConnection1:=TSQLConnection.Create(nil);
  SQLConnection1.DriverName:='Sqlite';
  SQLConnection1.Params.Values['Database']:=ExpandFileName(GetCurrentDir+'\Data\db.db');
  SQLConnection1.Params.Values['FailIfMissing']:='False';
  SQLConnection1.LoginPrompt:=false;

  if not SQLConnection1.Connected then SQLConnection1.Connected:=true;

  error:=false;
  Transaction:=SQLConnection1.BeginTransaction as TDBXSqliteTransaction;
  for i := 0 to codesBuffer.Count - 1 do
  begin
    Query := 'INSERT INTO codes_table (code) VALUES ('''+codesBuffer[i]+''')';
    SQLConnection1.ExecuteDirect(Query); 
  end;

  SQLConnection1.CommitFreeAndNil(TDBXTransaction(Transaction));

  except
    on E: Exception do
    begin
      if pos('UNIQUE constraint failed',E.Message)<>0 then
      begin
        line:='Code: '+codesBuffer[i]+' Duplicated!';
        Synchronize(UpdateLog);

        codesBuffer.Delete(i);
      end else
      begin
        line:='DBError: In insertingTransaction Exception raised with message: ' + E.Message;
        Synchronize(UpdateLog);
      end;
      SQLConnection1.RollbackFreeAndNil(TDBXTransaction(Transaction));
      error:=true;
    end;
  end;

  SQLConnection1.Free;

  if (error and (not stop)) then 
  begin 
    sleep(200); 
    goto again; 
  end;
end;

Ответы (0 шт):