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