Performans Ayarlaması

Render ve belleği optimize edin

Doconut'un kaynak profili üç şey tarafından hâkimdir: render DPI, önbellekte ne kalır ve oturumların ne kadar uzun yaşadığı. Bu kılavuz, etki sırasına göre kolları gösterir.

Çözünürlük — en büyük kol

ImageResolution (25–300 DPI) hem render süresini hem de görüntü boyutunu belirler. Çoğu format varsayılan olarak 200 DPI; görüntüler ve PSD varsayılan olarak 100 DPI kullanır.

csharp
// Bir belge listesi önizlemesi baskı kalitesine ihtiyaç duymaz
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { ImageResolution = 100 });

DPI'yi yarıya indirmek, sayfa başına piksel sayısını yaklaşık olarak dörtte birine düşürür — daha hızlı renderlar, daha küçük aktarım, daha az önbellek belleği. Yakınlaştırma yoğun kullanım senaryoları (CAD, mühendislik çizimleri) için 250–300 DPI ayırın.

Yoğun gömülü görseller içeren PDF'lerde, PdfConfig daha ince ayarlar ekler: CompressImages + CompressQuality, ResizeImages + ResizeResolution ve CompressFast. Düz görüntüler için, ImageConfig.MaxImagePixelSize (varsayılan 3000 px) çıkış boyutunu sınırlar.

Sayfa önbellekleme — bellek vs. yeniden render

BaseConfig.CachePages (varsayılan true) oturum süresi boyunca her render edilmiş sayfayı bellekte tutar. Bu, etkileşimli görüntüleme için doğru varsayılandır — kullanıcılar ileri geri kaydırır. Şu durumlarda kapatın:

  • belgeler çok büyük ve bir kez, baştan sona görüntüleniyor,
  • çok sayıda eşzamanlı oturum önbellek sayfalarını katlayacaktır,
  • RAM tutmak yerine görüntü başına CPU ödemeyi tercih edersiniz.
csharp
var token = await viewer.OpenDocumentAsync(path, new PdfConfig { CachePages = false });

İstemci tarafında, ViewerConfig.CacheEnabled = true tarayıcı belleğinde yaklaşan sayfa görüntülerinin küçük bir hareketli penceresini önceden yükler. Bu, görüntü başına bir önceden getirme önbelleğidir, kalıcı localStorage değildir.

Oturumlar — görmediğiniz bellek

Her açık oturum, ayrıştırılmış belge modelini ve (CachePages ile) render edilmiş sayfalarını, kayar TimeOut (varsayılan 60 dakika) son istekten itibaren dolana kadar tutar. Bu durumu kontrol altında tutan iki alışkanlık:

  • İşiniz bittiğinde kapatın. viewer.CloseDocument(token) motoru hemen serbest bırakır, boş bekleme penceresini beklemek yerine.
  • Zaman aşımını doğru boyutlandırın. Kullanıcıların iki dakika baktığı bir önizleme bir saatlik oturuma ihtiyaç duymaz:
csharp
var token = await viewer.OpenDocumentAsync(path, new DocOptions { TimeOut = 10 });

Değiş tokuşu hatırlayın: süresi dolduktan sonra widget Document session not found. Please re-open document. gösterir — gerçek okuma oturumlarıyla eşleşen bir zaman aşımı seçin.

Formata özgü anahtarlar

  • Excel: MemoryOptimizationPreference varsayılan olarak açıktır ve çok büyük çalışma kitaplarını render ederken bellek ayak izini azaltır — açık bırakın, ya da bellek karşılığında küçük bir hız artışı istiyorsanız false olarak ayarlayın; SheetNames / PrintArea renderı yalnızca önemli olana sınırlayın.
  • Yönlendirme modu önceden bir maliyet gerektirir: DefaultRender = false belgeyi tamamen açılışta PDF'ye dönüştürür. Yerel metin tabanlı arama sağlar, ancak 500 sayfalık bir belgede açma çağrısı bu dönüşümü taşır — onu otomatik olarak etkinleştirmeyin.
  • Belge fontları olmayan bir sunucuda Word/PowerPoint: Office olmayan bir Windows Server, geliştirme makinesine göre çok daha az fonta sahiptir. Eksik fontlar yavaş geri dönüş araştırmasına ve hatalı ölçümlere neden olur; fontları kurun ya da FontFolders'i bu fontları içeren bir klasöre yönlendirin.

İstemci tarafı stratejileri

  • LargeDoc = true — çok büyük belgeler için tembel yükleme stratejisi; sayfalar kullanıcı yaklaştıkça yüklenir.
  • AutoLoad = false (varsayılan) — View(token)'ı gerçekten çağırana kadar render etmeyin.
  • ShowThumbs = false — tek sayfalı veya gömülü önizlemeler için küçük resim oluşturmayı/isteklerini atlayın.
  • FixedZoom'ı etkinleştirmek serbest biçimli yakınlaştırma değişikliklerini önler; bir C# ViewerConfig eşlediğinizde, küçük ekranlar için FixedZoomPercentMobile'ı (C# varsayılan 75) ayarlayın.

Tek seferlik başlangıç, istek başına değil

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance), Application_Start içinde, DoconutHost.Initialize yanına konmalıdır — kodlamaları istek başına kaydetmek boşa harcanan bir iştir; tamamen unutmak eski kod sayfası belgelerini bozar.

Başlangıçtan sonraki ilk belge

Doconut, bir uygulamada belge ilk kez açıldığında belge motorlarını yükler — havuz başladıktan sonra, her yeniden döndürmeden sonra ve her yeni uygulama alanında. Bu ilk açma, sonrakilerden daha yavaştır ve gerçek zamanlı antivirüs bunu çok daha yavaş hâle getirebilir: motorlar bellekten yüklenir ve Microsoft Defender bu kodu yüklenirken tarar. Bir klasör dışlaması yardımcı olmaz, çünkü dosya yoktur.

4 çekirdekli Windows Server 2022 makinesinde ölçüldüğünde, iki sayfalık bir Word belgesi açma:

İlk belgeSonraki her belge
Defender real-time protection onyaklaşık 70 s0.3–7.5 s, formata bağlı olarak
Defender real-time protection off12–15 s0.3–7.5 s, formata bağlı olarak

Bunu bir kez ödeyin, kullanıcılarınızdan önce:

  • Worker sürecini canlı tutun: uygulama havuzunun Start Mode ayarını AlwaysRunning olarak ayarlayın ve idle time-out değerini artırın ya da devre dışı bırakın, böylece sessiz bir gece motorları boşaltmaz.
  • Başlangıçta ısıtın: IIS Application Initialization'ı etkinleştirin (sitede preloadEnabled="true") ve initializationPage'i küçük bir belge açan bir sayfanıza yönlendirin. İlk gerçek kullanıcı motorların zaten yüklü olduğunu görür.
  • İlk isteğe zaman tanıyın: bir yük dengeleyici sağlık kontrolü veya kısa zaman aşımı olan bir upstream proxy, başarılı olabilecek soğuk bir başlangıcı iptal edebilir.

Bir sunucuda antivirüs ayarlarını değiştirip değiştirmemek, güvenlik ekibinizin kararına bağlıdır; yukarıdaki ısıtma işlemi onun olmadan da çalışır.

Uygulama havuzu

Tek bir sunucuda, belge oturumları ve önbellekli sayfalar worker sürecinde yaşar. Her uygulama havuzu yeniden döndürmesi — planlanan, Web.config'a bir düzenleme, ya da havuzun idle time-out (IIS'de varsayılan 20 dakika) — hepsini siler ve açık görüntüleyiciler Document session not found. Please re-open document. gösterir.

  • Havuzun idle time-out ve yeniden döndürme takvimini kullanıcılarınızın gerçek okuma süresiyle hizalayın, ya da bir yeniden döndürmeden sonra belgeleri yeniden açmaya hazır olun.
  • Havuzu 64-bit bir süreç olarak çalıştırın (Enable 32-Bit Applications'ı kapalı bırakın). Büyük belgeler, 32-bit worker sürecinin sahip olmadığı adres alanına ihtiyaç duyar.
  • Bir web farmı oturumları paylaşılan bir depoda tutar, böylece bir düğümdeki yeniden döndürme onları kaybetmez — bkz. Oturumlar ve Güvenlik.

Bir ayarlama kontrol listesi

  1. UX'inizin kabul ettiği en düşük ImageResolution'ı ayarlayın.
  2. Etkileşimli görüntüleme için CachePages'ı açık tutun; tek geçiş veya yüksek eşzamanlılık senaryoları için kapalı.
  3. Oturumları açıkça kapatın; kullanım dalgalı olduğunda TimeOut'ı kısaltın.
  4. Büyük belgeler için istemci tarafında LargeDoc + varsayılan AutoLoad = false kullanın.
  5. Metin içeren bir PDF projeksiyonu gerektiğinde yalnızca DefaultRender = false kullanın.

Bu sayfa yardımcı oldu mu?