Kopijavimo-rašant objekto grafo operacijos
THotPDF teikia įdėtus išsaugojimo taškus įkeltiems arba surinktiems netiesioginių objektų grafams beklonuodamas dokumento operacijos pradžioje
Operacijos gyvavimo ciklas
PDF.BeginGraphTransaction('metadata edit');
try
Info.AddStringValue('Producer', 'HotPDF');
PDF.CommitGraphTransaction;
except
PDF.RollbackGraphTransaction;
raise;
end;
BeginGraphTransaction indeksuoja dabartines netiesiogines šaknis ir įdiegia keitimo stebėtojus, bet nesukuria momentinių kopijų; pirmasis įrašymas į esamą netiesioginę šaknį tame kadre sukuria vieną momentinę kopiją, o vėlesni įrašymai į tą pačią šaknį ją pakartotinai naudoja
CommitGraphTransaction išlaiko dabartinį grafą ir atmeta arba perduoda momentines kopijas be jo klonavimo; RollbackGraphTransaction atkuria šaknų objektus vietoje, pašalina objektus, pridėtus po išsaugojimo taško, ir atkuria objekto numerio paskirstymą
Įdėtos operacijos yra nepriklausomi išsaugojimo taškai; vidinis atšaukimas grįžta į vidinę įėjimo būseną, o vidinis įvykdymas išlaiko pakankamai istorijos vėlesniam išoriniam atšaukimui
Automatinis ir aiškus rašymo paruošimas
THPDFDictionaryObject.AddValue, ReplaceValue ir DeleteValue, THPDFArrayObject.AddObject ir SetIndexedItem bei THPDFStreamObject.Length keitimai automatiškai praneša susijusiai netiesioginei šakniai
Vieši skaliariniai laukai ir neapdoroti srauto baitai negali perimti priskyrimo; prieš priskirdami Value, keisdami viešas objekto vėliavas, pakeisdami grafo rodykles arba rašydami per THPDFStreamObject.Stream iškvieskite PrepareLoadedObjectForWrite
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;
Atmintis ir našumas
Momentinių kopijų atmintis auga kartu su paliestomis netiesioginėmis šaknimis, o ne su visu dokumento dydžiu; didelės srauto apkrovos išliejamos į nuosavus laikinuosius failus po GraphTransactionMemoryThreshold, kurio numatytoji reikšmė yra 16 MiB
Atšaukimas vėl įdeda išsaugotus žodyno įrašus, masyvo elementus ir srauto saugyklą į esamą šaknį, vengdamas antros gilios kopijos; šaknies rodyklė lieka stabili, bet tiesioginių palikuonių rodykles po atšaukimo reikia gauti iš naujo
GetGraphTransactionStatistics grąžina Active, įdėjimo Depth, SnapshotCount, AddedObjectCount, rezidencinius ir išlietus momentinių kopijų baitus bei didžiausius rezidencinius momentinių kopijų baitus
THPDFBeforeMutationEvent yra žemo lygio stebėtojo parašas, naudojamas konteinerio ir gyvavimo ciklo keitimams perduoti į susijusios netiesioginės šaknies momentinę kopiją
Apimtis
Operacijos apima netiesioginį objekto grafą, gyvavimo ciklo būseną, pridėtas šaknis ir objekto numerio paskirstymą; iškvietėjo nuosavybei priklausančios rodyklės, įkelto puslapio tvarkymo masyvai, atvaizduotos talpyklos ir kita fasado šalutinė būsena nėra žurnalizuojami
Nešalinkite, netvarkykite arba nepakeiskite esamų įrašų GetLoadedIndirectObjects operacijai veikiant; naudokite grafo konteinerio metodus ir po atšaukimo iš naujo gaukite tiesioginius palikuonis