Kopijavimo-rašant objekto grafo operacijos

THotPDF teikia įdėtus išsaugojimo taškus įkeltiems arba surinktiems netiesioginių objektų grafams beklonuodamas dokumento operacijos pradžioje

Operacijos gyvavimo ciklas

PDF.BeginGraphTransaction('metadata edit');
try
  Info.AddStringValue('Producer', 'HotPDF');
  PDF.CommitGraphTransaction;
except
  PDF.RollbackGraphTransaction;
  raise;
end;

BeginGraphTransaction indeksuoja dabartines netiesiogines šaknis ir įdiegia keitimo stebėtojus, bet nesukuria momentinių kopijų; pirmasis įrašymas į esamą netiesioginę šaknį tame kadre sukuria vieną momentinę kopiją, o vėlesni įrašymai į tą pačią šaknį ją pakartotinai naudoja

CommitGraphTransaction išlaiko dabartinį grafą ir atmeta arba perduoda momentines kopijas be jo klonavimo; RollbackGraphTransaction atkuria šaknų objektus vietoje, pašalina objektus, pridėtus po išsaugojimo taško, ir atkuria objekto numerio paskirstymą

Įdėtos operacijos yra nepriklausomi išsaugojimo taškai; vidinis atšaukimas grįžta į vidinę įėjimo būseną, o vidinis įvykdymas išlaiko pakankamai istorijos vėlesniam išoriniam atšaukimui

Automatinis ir aiškus rašymo paruošimas

THPDFDictionaryObject.AddValue, ReplaceValue ir DeleteValue, THPDFArrayObject.AddObject ir SetIndexedItem bei THPDFStreamObject.Length keitimai automatiškai praneša susijusiai netiesioginei šakniai

Vieši skaliariniai laukai ir neapdoroti srauto baitai negali perimti priskyrimo; prieš priskirdami Value, keisdami viešas objekto vėliavas, pakeisdami grafo rodykles arba rašydami per THPDFStreamObject.Stream iškvieskite PrepareLoadedObjectForWrite

PDF.BeginGraphTransaction('raw stream edit');
try
  PDF.PrepareLoadedObjectForWrite(StreamObject);
  StreamObject.Stream.Size:= 0;
  StreamObject.Stream.WriteBuffer(Bytes[0], Length(Bytes));
  StreamObject.Length:= Length(Bytes);
  PDF.CommitGraphTransaction;
except
  PDF.RollbackGraphTransaction;
  raise;
end;

Atmintis ir našumas

Momentinių kopijų atmintis auga kartu su paliestomis netiesioginėmis šaknimis, o ne su visu dokumento dydžiu; didelės srauto apkrovos išliejamos į nuosavus laikinuosius failus po GraphTransactionMemoryThreshold, kurio numatytoji reikšmė yra 16 MiB

Atšaukimas vėl įdeda išsaugotus žodyno įrašus, masyvo elementus ir srauto saugyklą į esamą šaknį, vengdamas antros gilios kopijos; šaknies rodyklė lieka stabili, bet tiesioginių palikuonių rodykles po atšaukimo reikia gauti iš naujo

GetGraphTransactionStatistics grąžina Active, įdėjimo Depth, SnapshotCount, AddedObjectCount, rezidencinius ir išlietus momentinių kopijų baitus bei didžiausius rezidencinius momentinių kopijų baitus

THPDFBeforeMutationEvent yra žemo lygio stebėtojo parašas, naudojamas konteinerio ir gyvavimo ciklo keitimams perduoti į susijusios netiesioginės šaknies momentinę kopiją

Apimtis

Operacijos apima netiesioginį objekto grafą, gyvavimo ciklo būseną, pridėtas šaknis ir objekto numerio paskirstymą; iškvietėjo nuosavybei priklausančios rodyklės, įkelto puslapio tvarkymo masyvai, atvaizduotos talpyklos ir kita fasado šalutinė būsena nėra žurnalizuojami

Nešalinkite, netvarkykite arba nepakeiskite esamų įrašų GetLoadedIndirectObjects operacijai veikiant; naudokite grafo konteinerio metodus ir po atšaukimo iš naujo gaukite tiesioginius palikuonis