עסקאות גרף אובייקטים של העתק-בעת-כתיבה
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