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