Copy-on-Write-objektigraafitoimitukset
THotPDF tarjoaa sisäkkäiset tallennuspisteet ladatuille tai kootuille epäsuorille objektigraafeille kloonaamatta asiakirjaa toimituksen alussa
Toimituksen elinkaari
PDF.BeginGraphTransaction('metadata edit');
try
Info.AddStringValue('Producer', 'HotPDF');
PDF.CommitGraphTransaction;
except
PDF.RollbackGraphTransaction;
raise;
end;
BeginGraphTransaction indeksoi nykyiset epäsuorat juuret ja asentaa mutaatioilmaisimet, mutta ei luo tilannekuvia; ensimmäinen kirjoitus olemassa olevaan epäsuoraan juureen tuossa kehyksessä luo yhden tilannekuvan, ja myöhemmät kirjoitukset samaan juureen käyttävät sitä uudelleen
CommitGraphTransaction säilyttää nykyisen graafin ja hylkää tai siirtää tilannekuvat kloonaamatta sitä; RollbackGraphTransaction palauttaa juuriobjektit paikoilleen, poistaa tallennuspisteen jälkeen lisätyt objektit ja palauttaa objektinumeroiden allokoinnin
Sisäkkäiset toimitukset ovat itsenäisiä tallennuspisteitä; sisempi peruutus palaa sisemmän aloitustilan, kun taas sisempi kiinnitys säilyttää riittävästi historiaa myöhempää ulompaa peruutusta varten
Automaattinen ja eksplisiittinen kirjoituksen valmistelu
THPDFDictionaryObject.AddValue, ReplaceValue ja DeleteValue, THPDFArrayObject.AddObject ja SetIndexedItem sekä THPDFStreamObject.Length-muutokset ilmoittavat ympäröivälle epäsuoralle juurelle automaattisesti
Julkiset skalaarikentät ja raakavirta-tavut eivät voi siepata osoitusta; kutsu PrepareLoadedObjectForWrite-metodia ennen Value-arvon osoittamista, julkisten objektilipujen muuttamista, graafiosoittimien korvaamista tai THPDFStreamObject.Stream-virran kautta kirjoittamista
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;
Muisti ja suorituskyky
Tilannekuvamuistin käyttö kasvaa kosketettujen epäsuorien juurien eikä asiakirjan kokonaiskoon mukaan; suuret virtohyötykuormat vuotavat omistettuihin väliaikaistiedostoihin GraphTransactionMemoryThreshold-arvon jälkeen, joka on oletuksena 16 MiB
Peruutus vaihtaa tallennetut sanakirjamerkinnät, taulukkoelementit ja virto-tallennustilan takaisin olemassa olevaan juureen välttäen toisen syväkopion; juuriosoite pysyy vakaana, mutta suoraan jälkeläisten osoittimet on hankittava uudelleen peruutuksen jälkeen
GetGraphTransactionStatistics palauttaa Active-arvon, sisäkkäisyyden Depth-arvon, SnapshotCount-arvon, AddedObjectCount-arvon, vastaanotetut ja vuotaneet tilannekuvatavut sekä huippuvastaanotetun tilannekuvatavumäärän
THPDFBeforeMutationEvent on matalan tason ilmaisinallekirjoitus, jota käytetään säiliö- ja elinkaarimutaatioiden reitittämiseen ympäröivän epäsuoran juuren tilannekuvaan
Laajuus
Toimitukset kattavat epäsuoran objektigraafin, elinkaaritilan, lisätyt juuret ja objektinumeroiden allokoinnin; soittajan omistamat osoittimet, ladattujen sivujen järjestystaulukot, renderoidut välimuistit ja muut ulkoasu-sivuprosessit eivät ole tapahtumalogissa
Älä poista, järjestä uudelleen tai korvaa olemassa olevia merkintöjä GetLoadedIndirectObjects-rakenteessa toimituksen ollessa aktiivinen; käytä graafisäiliömetodeja ja hanki suorat jälkeläiset uudelleen peruutuksen jälkeen