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