Copy-on-Write Nesne Grafiği İşlemleri
THotPDF, işlem başında belgeyi kopyalamadan yüklenen veya birleştirilen dolaylı nesne grafikleri için iç içe kayıt noktaları sağlar
İşlem yaşam döngüsü
PDF.BeginGraphTransaction('metadata edit');
try
Info.AddStringValue('Producer', 'HotPDF');
PDF.CommitGraphTransaction;
except
PDF.RollbackGraphTransaction;
raise;
end;
BeginGraphTransaction geçerli dolaylı kökleri dizinler ve değişim gözlemcilerini kurar ancak anlık görüntü oluşturmaz; o çerçevede mevcut bir dolaylı köke yapılan ilk yazı bir anlık görüntü oluşturur ve aynı köke yapılan daha sonraki yazılar onu yeniden kullanır
CommitGraphTransaction geçerli grafiği korur ve onu kopyalamadan anlık görüntüleri atar veya aktarır; RollbackGraphTransaction kök nesneleri yerinde geri yükler, kayıt noktasından sonra eklenen nesneleri kaldırır ve nesne numarası tahsisini geri yükler
Geri alma, nesneleri geri yüklemeden önce yüklenen form ilişki önbelleğini geçersizleştirir; böylece sonraki alan sorguları kaldırılan alan veya widget referanslarını tutmak yerine geri yüklenen grafikten yeniden kurulur
İç içe işlemler bağımsız kayıt noktalarıdır; bir iç geri alma iç giriş durumuna dönerken, bir iç işleme sonraki dış geri alma için yeterli geçmişi tutar
Otomatik ve açık yazma hazırlığı
THPDFDictionaryObject.AddValue, ReplaceValue ve DeleteValue, THPDFArrayObject.AddObject ve SetIndexedItem ile THPDFStreamObject.Length değişiklikleri çevreleyen dolaylı kökü otomatik olarak bilgilendirir
Genel skaler alanlar ve ham akış baytları atamayı yakalayamaz; Value değerini atamadan, genel nesne bayraklarını değiştirmeden, grafik işaretçilerini değiştirmeden veya THPDFStreamObject.Stream üzerinden yazmadan önce PrepareLoadedObjectForWrite öğesini çağırın
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;
Bellek ve performans
Anlık görüntü belleği, toplam belge boyutu yerine dokunulan dolaylı köklerle büyür; büyük akış yükleri, varsayılanı 16 MiB olan GraphTransactionMemoryThreshold sonrasında sahip olunan geçici dosyalara dökülür
Geri alma, kaydedilen sözlük girdilerini, dizi öğelerini ve akış depolamayı mevcut köke geri takas ederek ikinci bir derin kopyadan kaçınır; kök işaretçisi kararlı kalır ancak doğrudan altöğe işaretçileri geri almadan sonra yeniden alınmalıdır
GetGraphTransactionStatistics, Active, iç içe Depth, SnapshotCount, AddedObjectCount, resident ve dökülen anlık görüntü baytları ile en yüksek resident anlık görüntü baytlarını döndürür
THPDFBeforeMutationEvent, kapsayıcı ve yaşam döngüsü mutasyonlarını çevreleyen dolaylı kök anlık görüntüsüne yönlendirmek için kullanılan düşük seviyeli gözlemci imzasıdır
Kapsam
İşlemler dolaylı nesne grafiğini, yaşam döngüsü durumunu, eklenen kökleri ve nesne numarası tahsisini kapsar; çağırana ait işaretçiler, yüklenen sayfa sıralama dizileri, render edilen önbellekler ve diğer cephe yan durumları günlüğe kaydedilmez
Bir işlem etkinken GetLoadedIndirectObjects içindeki mevcut girdileri kaldırmayın, yeniden sıralamayın veya değiştirmeyin; grafik kapsayıcı yöntemlerini kullanın ve geri almadan sonra doğrudan altöğeleri yeniden alın