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.
// 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.
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:
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:
MemoryOptimizationPreferencevarsayı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ızfalseolarak ayarlayın;SheetNames/PrintArearenderı yalnızca önemli olana sınırlayın. - Yönlendirme modu önceden bir maliyet gerektirir:
DefaultRender = falsebelgeyi 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#ViewerConfigeşlediğinizde, küçük ekranlar içinFixedZoomPercentMobile'ı (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 belge | Sonraki her belge | |
|---|---|---|
| Defender real-time protection on | yaklaşık 70 s | 0.3–7.5 s, formata bağlı olarak |
| Defender real-time protection off | 12–15 s | 0.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ı
AlwaysRunningolarak 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") veinitializationPage'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
- UX'inizin kabul ettiği en düşük
ImageResolution'ı ayarlayın. - 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ı. - Oturumları açıkça kapatın; kullanım dalgalı olduğunda
TimeOut'ı kısaltın. - Büyük belgeler için istemci tarafında
LargeDoc+ varsayılanAutoLoad = falsekullanın. - Metin içeren bir PDF projeksiyonu gerektiğinde yalnızca
DefaultRender = falsekullanın.
Bu sayfa yardımcı oldu mu?