Copy-on-Write Object Graph Transactions
THotPDF cung cấp các savepoint lồng nhau cho đồ thị đối tượng gián tiếp đã nạp hoặc đã lắp ráp mà không nhân bản tài liệu khi bắt đầu giao dịch
Vòng đời giao dịch
PDF.BeginGraphTransaction('metadata edit');
try
Info.AddStringValue('Producer', 'HotPDF');
PDF.CommitGraphTransaction;
except
PDF.RollbackGraphTransaction;
raise;
end;
BeginGraphTransaction lập chỉ mục các gốc gián tiếp hiện tại và cài đặt bộ quan sát đột biến nhưng không tạo ảnh chụp nào; lần ghi đầu tiên vào một gốc gián tiếp hiện có trong khung đó tạo một ảnh chụp, và các lần ghi sau vào cùng gốc tái sử dụng nó
CommitGraphTransaction giữ đồ thị hiện tại và loại bỏ hoặc chuyển các ảnh chụp mà không nhân bản nó; RollbackGraphTransaction khôi phục các đối tượng gốc tại chỗ, loại bỏ các đối tượng được nối sau savepoint, và khôi phục cấp phát số đối tượng
Giao dịch lồng nhau là các savepoint độc lập; một lần rollback trong khôi phục về trạng thái vào trong, trong khi một lần commit trong giữ đủ lịch sử cho một lần rollback ngoài sau đó
Chuẩn bị ghi tự động và tường minh
THPDFDictionaryObject.AddValue, ReplaceValue, và DeleteValue, THPDFArrayObject.AddObject và SetIndexedItem, và các thay đổi THPDFStreamObject.Length thông báo gốc gián tiếp bao quanh một cách tự động
Trường vô hướng công khai và byte stream thô không thể chặn phép gán; hãy gọi PrepareLoadedObjectForWrite trước khi gán Value, thay đổi cờ đối tượng công khai, thay thế con trỏ đồ thị, hoặc ghi qua 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;
Bộ nhớ và hiệu năng
Bộ nhớ ảnh chụp tăng theo các gốc gián tiếp bị chạm thay vì kích thước tài liệu tổng thể; payload stream lớn tràn ra các tệp tạm thuộc sở hữu sau GraphTransactionMemoryThreshold, mặc định của nó là 16 MiB
Rollback hoán đổi các mục dictionary, mục mảng, và lưu trữ stream đã lưu trở lại gốc hiện có, tránh một bản sao sâu thứ hai; con trỏ gốc vẫn ổn định, nhưng con trỏ đến các hậu duệ trực tiếp phải được lấy lại sau rollback
GetGraphTransactionStatistics trả về Active, Depth lồng nhau, SnapshotCount, AddedObjectCount, byte ảnh chụp thường trú và tràn, và byte ảnh chụp thường trú đỉnh
THPDFBeforeMutationEvent là chữ ký bộ quan sát cấp thấp được dùng để định tuyến các đột biến container và vòng đời đến ảnh chụp gốc gián tiếp bao quanh
Phạm vi
Giao dịch bao phủ đồ thị đối tượng gián tiếp, trạng thái vòng đời, gốc được nối, và cấp phát số đối tượng; con trỏ do caller sở hữu, mảng thứ tự trang đã nạp, cache đã dựng, và trạng thái phụ khác của facade không được ghi nhật ký
Đừng xóa, sắp xếp lại, hoặc thay thế các mục hiện có trong GetLoadedIndirectObjects khi một giao dịch đang hoạt động; hãy dùng các phương thức container đồ thị và lấy lại các hậu duệ trực tiếp sau rollback