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