עסקאות גרף אובייקטים של העתק-בעת-כתיבה

THotPDF מספק נקודות שמירה מקוננות עבור גרפי אובייקטים עקיפים טעונים או מורכבים מבלי לשכפל את המסמך בעת התחלת העסקה

מחזור חיי עסקה

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

BeginGraphTransaction מindexering ‏את השורשים העקיפים הנוכחיים ומתקין צופי שינוי אך אינו יוצר snapshots; הכתיבה הראשונה לשורש עקיף קיים במסגרת זו יוצרת snapshot ‏אחד, וכתיבות מאוחרות יותר לאותו שורש עושות בו שימוש חוזר

CommitGraphTransaction שומר על הגרף הנוכחי ומשליך או מעביר snapshots ‏מבלי לשכפל אותו; RollbackGraphTransaction משחזר אובייקטי שורש במקומם, מסיר אובייקטים שהוספו אחרי נקודת השמירה ומשחזר את הקצאת מספרי האובייקטים

עסקאות מקוננות הן נקודות שמירה עצמאיות; rollback ‏פנימי חוזר למצב הכניסה הפנימי, בעוד commit ‏פנימי שומר מספיק היסטוריה ל-rollback ‏חיצוני מאוחר יותר

הכנת כתיבה אוטומטית ומפורשת

THPDFDictionaryObject.AddValue, ReplaceValue ‏ו-DeleteValue, THPDFArrayObject.AddObject ‏ו-SetIndexedItem, ושינויי THPDFStreamObject.Length מודיעים אוטומטית לשורש העקיף המקיף

שדות scalar ‏ציבוריים ובתי stream ‏גולמיים אינם יכולים ליירט השמה; קרא ל-PrepareLoadedObjectForWrite לפני השמה ל-Value, שינוי דגלי אובייקטים ציבוריים, החלפת מצביעי גרף או כתיבה דרך 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;

זיכרון וביצועים

זיכרון ה-snapshot ‏גדל עם השורשים העקיפים שנוגעו בהם ולא עם גודל המסמך הכולל; מטעני stream ‏גדולים נשפכים לקבצים זמניים בבעלות לאחר GraphTransactionMemoryThreshold, שברירת המחדל שלו היא 16 MiB

Rollback ‏מחליף רשומות מילון שמורות, איברי מערך ואחסון זרם חזרה אל השורש הקיים, ונמנע מהעתקה עמוקה שנייה; מצביע השורש נשאר יציב, אבל יש לרכוש מחדש מצביעים אל צאצאים ישירים אחרי rollback

GetGraphTransactionStatistics מחזיר את Active, Depth ‏הקינון, SnapshotCount, AddedObjectCount, בתים של snapshot ‏תושבים ונשפכים ובתי snapshot ‏תושבים שיא

THPDFBeforeMutationEvent הוא חתימת הצופה ברמה הנמוכה המשמשת לניתוב שינויי מיכל ומחזור חיים אל snapshot ‏השורש העקיף המקיף

היקף

עסקאות מכסות את גרף האובייקטים העקיפים, מצב מחזור החיים, שורשים שהוקצו ומקצת מספרי אובייקטים; מצביעים בבעלות קורא, מערכי סדר עמודים טעונים, מטמונים ממופים ומצב צד facade ‏אחר אינם מתועדים ביומן

אל תסיר, תסדר מחדש או תחליף רשומות קיימות ב-GetLoadedIndirectObjects ‏בעוד עסקה פעילה; השתמש במתודות מיכל גרף ורכוש מחדש צאצאים ישירים אחרי rollback