Transakcije grafa objektov s kopiranjem ob zapisu

THotPDF zagotavlja ugnezdene kontrolne točke za naložene ali sestavljene grafe posrednih objektov brez kloniranja dokumenta ob začetku transakcije

Transaction lifecycle

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

BeginGraphTransaction indeksira trenutne posredne korene in namesti opazovalce mutacij, vendar ne ustvari posnetkov; prvi zapis v obstoječi posredni koren v tem okviru ustvari en posnetek, poznejši zapisi v isti koren pa ga ponovno uporabijo

CommitGraphTransaction ohrani trenutni graf in zavrže ali prenese posnetke brez kloniranja; RollbackGraphTransaction obnovi korenske objekte na mestu, odstrani objekte, dodane po kontrolni točki, in obnovi dodeljevanje številk objektov

Ugnezdene transakcije so neodvisne kontrolne točke; notranja razveljavitev se vrne v notranje začetno stanje, medtem ko notranja potrditev ohrani dovolj zgodovine za poznejšo zunanjo razveljavitev

Automatic and explicit write preparation

THPDFDictionaryObject.AddValue, ReplaceValue in DeleteValue, THPDFArrayObject.AddObject in SetIndexedItem ter spremembe THPDFStreamObject.Length samodejno obvestijo obdajajoči posredni koren

Javna skalarna polja in surovi bajti tokov ne morejo prestreči dodeljevanja; pokličite PrepareLoadedObjectForWrite pred dodeljevanjem Value, spreminjanjem javnih zastavic objektov, zamenjavo kazalcev grafa ali pisanjem prek THPDFStreamObject.Stream

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;

Memory and performance

Pomnilnik posnetkov raste z dotaknjenimi posrednimi koreni namesto s skupno velikostjo dokumenta; velike tovorne vsebine tokov se po GraphTransactionMemoryThreshold, katerega privzeta vrednost je 16 MiB, prelijejo v lastniške začasne datoteke

Razveljavitev zamenja shranjene vnose slovarjev, elemente tabel in shrambo tokov nazaj v obstoječi koren, s čimer se izogne drugi globoki kopiji; kazalec korena ostane stabilen, vendar je treba kazalce na neposredne potomce po razveljavitvi ponovno pridobiti

GetGraphTransactionStatistics vrne Active, globino ugnezdenja Depth, SnapshotCount, AddedObjectCount, rezidenčne in prelite bajte posnetkov ter vršne rezidenčne bajte posnetkov

THPDFBeforeMutationEvent je nizkonivojski podpis opazovalca, uporabljen za usmerjanje mutacij vsebnikov in življenjskega cikla v posnetek obdajajočega posrednega korena

Scope

Transakcije pokrivajo graf posrednih objektov, stanje življenjskega cikla, dodane korene in dodeljevanje številk objektov; kazalci v lasti klicatelja, tabele vrstnega reda naloženih strani, upodobljeni predpomnilniki in drugo stransko stanje fasade se ne dnevničijo

Ne odstranjujte, preurejajte ali zamenjujte obstoječih vnosov v GetLoadedIndirectObjects, medtem ko je transakcija aktivna; uporabite metode vsebnikov grafa in po razveljavitvi ponovno pridobite neposredne potomce