Copy-on-Write transakcije grafa objekata

THotPDF osigurava ugniježđene točke spremanja za učitane ili sastavljene grafove neizravnih objekata bez kloniranja dokumenta na početku transakcije

Životni ciklus transakcije

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

BeginGraphTransaction indeksira trenutne neizravne korijene i instalira promatrače mutacije, ali ne stvara snimke; prvi zapis u postojeći neizravni korijen u tom okviru stvara jednu snimku, a kasniji zapisi u isti korijen ponovno je koriste

CommitGraphTransaction zadržava trenutni graf i odbacuje ili prenosi snimke bez kloniranja; RollbackGraphTransaction vraća korijenske objekte na mjesto, uklanja objekte dodane nakon točke spremanja i vraća dodjelu brojeva objekata

Ugniježđene transakcije su neovisne točke spremanja; unutarnji rollback vraća se u stanje unutarnjeg unosa, dok unutarnji commit zadržava dovoljno povijesti za kasniji vanjski rollback

Automatska i eksplicitna priprema zapisa

THPDFDictionaryObject.AddValue, ReplaceValue i DeleteValue, THPDFArrayObject.AddObject i SetIndexedItem te promjene THPDFStreamObject.Length automatski obavještavaju okolni neizravni korijen

Javna skalarna polja i neobrađeni bajtovi toka ne mogu presresti dodjelu; pozovite PrepareLoadedObjectForWrite prije dodjeljivanja Value, mijenjanja javnih zastavica objekta, zamjene pokazivača grafa ili pisanja kroz 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;

Memorija i performanse

Snimljena memorija raste s ukrnutim neizravnim korijenima umjesto s ukupnom veličinom dokumenta; veliki korisni sadržaji tokova prelijevaju se u vlasničke privremene datoteke nakon GraphTransactionMemoryThreshold, čija je zadana vrijednost 16 MiB

Rollback zamjenjuje spremljene unose rječnika, stavke niza i pohranu toka natrag u postojeći korijen, izbjegavajući drugu duboku kopiju; pokazivač korijena ostaje stabilan, ali pokazivače na izravne potomke treba ponovno pribaviti nakon rollbacka

GetGraphTransactionStatistics vraća Active, ugniježđenu Depth, SnapshotCount, AddedObjectCount, rezidentne i prelijevane snimljene bajtove te vršne rezidentne snimljene bajtove

THPDFBeforeMutationEvent je potpis promatrača niske razine koji se koristi za usmjeravanje mutacija spremnika i životnog ciklusa prema okolnom neizravnom korijenu snimke

Opseg

Transakcije pokrivaju graf neizravnih objekata, stanje životnog ciklusa, dodane korijene i dodjelu brojeva objekata; pokazivači koje posjeduje pozivatelj, polja redoslijeda učitanih stranica, renderirane predmemorije i drugo bočno stanje fasade ne unose se u dnevnik

Ne uklanjajte, ne preuređujte i ne zamjenjujte postojeće unose u GetLoadedIndirectObjects dok je transakcija aktivna; koristite metode spremnika grafa i ponovno pribavite izravne potomke nakon rollbacka