Optymalizacja zużycia pamięci w aplikacjach do przeglądania dokumentów w dużej skali
← Back to Blog7 min read

Optymalizacja zużycia pamięci w aplikacjach do przeglądania dokumentów w dużej skali

Optymalizacja zużycia pamięci w przeglądarkach dokumentów .NET w dużej skali z Doconut
Optymalizacja zużycia pamięci w przeglądarkach dokumentów .NET w dużej skali z Doconut

Masz tysiące plików PDF, dokumentów Office lub rysunków CAD do wyświetlenia w portalu opartym na .NET? I nie chcesz, aby Twój serwer wyczerpał pamięć RAM? Sztuczka polega na połączeniu leniwego strumieniowania, ukierunkowanych wtyczek i zoptymalizowanego potoku renderowania Doconut. W kolejnych sekcjach przeanalizujemy problemy związane z pamięcią, które pojawiają się w aplikacjach o skali przedsiębiorstwa i dużej liczbie dokumentów, a następnie pokażemy, jak Doconut — uniwersalna przeglądarka dokumentów dla backendów .NET — przełamuje wąskie gardła, które ograniczają tradycyjne przeglądarki. Aha, czeka bezpłatna wersja próbna, jeśli chcesz zobaczyć korzyści w własnym środowisku.


Zrozumienie presji pamięci w przeglądarkach dokumentów .NET

Duże portale dokumentacyjne często wczytują cały plik do pamięci, zanim pojawi się pierwsza strona. Rysunek CAD o wielkości 200 MB lub PDF o 500 stronach może szybko przytłoczyć zbieracz śmieci .NET, wywołać pełne przerwy GC i zmusić Cię do nadmiernego przydzielania zasobów serwerów.

Dlaczego domyślny model renderowania .NET utrudnia skalowalność

ObjawTypowa przyczyna w nieprzemyślanych implementacjach
Wyjątki braku pamięciTablice bajtów całego pliku przechowywane w statycznej pamięci podręcznej
Wolne ładowanie pierwszej stronyDekodowanie całego dokumentu przed renderowaniem
Utrata wątków w puliDługotrwałe renderowanie obciążone CPU blokuje asynchroniczne potoki
Nieprzewidywalne skoki opóźnieńZbieranie dużych przypiętych obiektów przez GC

Dodaj wtyczki anotacji lub OCR, które gromadzą bitmapy obrazów, a presja się mnoży. Optymalnym rozwiązaniem jest przetwarzanie wyłącznie tego, czego użytkownik potrzebuje w danej chwili i utrzymywanie wszystkich buforów pośrednich krótkotrwałych.

Odpowiedź Doconut: lekki, zoptymalizowany pod zależnościami rdzeń

Architektura Doconut oparta na .NET 6 została przebudowana, aby zredukować przydziały sterty:

  • Optymalizacja zależności – biblioteka ładuje tylko moduły renderujące wymagane dla bieżącego typu pliku (PDF, Office, CAD, obraz). Nieużywane wtyczki pozostają poza pamięcią, utrzymując ślad procesu minimalny.
  • Projektowanie z priorytetem strumieni – pliki są otwierane jako strumienie, a nie jako całe tablice bajtów, dzięki czemu środowisko wykonawcze może stronicować dane z dysku na żądanie.
  • Wsparcie zadań w tle – ciężkie zadania konwersji mogą być przenoszone do procesów roboczych lub Azure Functions, pozostawiając warstwę webową wolną dla interaktywnego przeglądania.

Gdy dopasujesz przeglądarkę do asynchronicznych wzorców .NET, Doconut pozwala obsługiwać tysiące jednoczesnych sesji na skromnym klastrze maszyn wirtualnych.


Jak włączyć leniwe ładowanie

  1. Zarejestruj middleware Doconut w swoim potoku ASP.NET Core. Middleware przechwytuje żądania przeglądarki i wstrzykuje niezbędne usługi.
  2. Otwieraj dokumenty jako strumienie zamiast ładować cały plik. Metoda OpenDocument Doconut przyjmuje ścieżkę do pliku lub strumień i zwraca token reprezentujący otwarty dokument.
  3. Żądaj stron na żądanie po stronie klienta. Gdy front‑end poprosi o konkretną stronę, Doconut odczytuje tylko wymagane obiekty, renderuje obraz rastrowy i zwraca lekki miniaturkę.

Ponieważ przeglądarka działa z strumieniami, możesz przechowywać pliki w Azure Blob Storage, Amazon S3 lub lokalnym NAS bez kopiowania ich na lokalny dysk serwera webowego. System operacyjny zajmuje się stronicowaniem, a środowisko .NET utrzymuje jedynie małe bufory potrzebne dla aktywnej strony.

Korzyści dla wdrożeń w dużej skali

KorzyśćJak Doconut to osiąga
Przewidywalne zużycie RAMCache stron o stałym rozmiarze + dostęp wyłącznie przez strumień
Szybkie renderowanie pierwszej stronyOdczytuje tylko nagłówek dokumentu i obiekty pierwszej strony
Skalowalność w różnych przeglądarkachTa sama logika oparta na strumieniach działa dla front‑endów HTML5/React, Angular lub Vue
Zmniejszona presja GCBrak dużych przypiętych tablic bajtów; wszystkie bufory są krótkotrwałe

Połącz leniwe ładowanie z zadaniami konwersji w tle, a warstwa webowa nigdy nie będzie się zacięła przy transformacjach obciążających CPU.


Wtyczki .NET do anotacji i OCR bez nadmiernego obciążenia

Przedsiębiorstwa uwielbiają anotacje i wyszukiwalny OCR, ale nieprzemyślane podejście utrzymuje bitmapę pełnej rozdzielczości każdej strony w pamięci wyłącznie po to, aby rysować podświetlenia lub wykonywać rozpoznawanie tekstu. Model wtyczek Doconut izoluje te funkcje jako niezależne usługi na żądanie.

Anotacja – lekka, zarządzanie per‑strona

Gdy strona zostanie załadowana, możesz pobrać menedżera anotacji, który przechowuje tylko dane wektorowe (współrzędne, styl, notatki). Dodanie pieczątki lub podświetlenia aktualizuje ten wektorowy magazyn; podstawowa bitmapa nigdy nie jest duplikowana. Doconut ponownie renderuje stronę z nakładką tylko wtedy, gdy klient o to poprosi, więc nawet PDF o 500 stronach z tysiącami anotacji zużywa tylko ułamek pamięci, którą wymagałoby rozwiązanie oparte na bitmapach.

OCR – wyodrębnianie tekstu w locie

Wtyczka Search wykonuje OCR tylko na stronach, do których przewija użytkownik. Konfigurujesz żądaną rozdzielczość obrazu (np. 200 dpi) w opcjach dokumentu, a Doconut wyodrębnia tekst dla bieżącej strony, przechowując wynik w skompresowanym indeksie powiązanym z tokenem dokumentu. Proces OCR jest odłączony od renderowania, co pozwala skalować go poziomo (np. za pomocą Azure Functions) bez zwiększania śladu pamięciowego serwera webowego obsługującego przeglądarkę.

Dlaczego ma to znaczenie dla dużych przedsiębiorstw

  • Przewidywalny koszt – anotacje i OCR działają per‑strona, a nie per‑dokument, utrzymując zużycie pamięci liniowo względem widocznej treści.
  • Gotowość do zgodności – anotacje są przechowywane jako XML, co ułatwia audyty lub redakcje.
  • Bezpieczeństwo wielodzierżawców – token każdego najemcy izoluje jego indeks OCR, zapobiegając wyciekom danych między najemcami.

Konwersja po stronie serwera i kontrolowane drukowanie: utrzymanie wydajności obciążeń

Wiele portali musi konwertować pliki Office, rysunki CAD lub wiadomości e‑mail na format PDF lub obrazu w celu jednolitego renderowania. Częstym pułapką jest wykonywanie konwersji w procesie, co powoduje skoki zużycia RAM i CPU, gdy użytkownik czeka. Wtyczka Converter Doconut przenosi ciężką pracę do usługi po stronie serwera, którą możesz skalować poziomo.

Konwersja bez wczytywania całego pliku źródłowego

API konwersji przyjmuje ścieżki źródłowe i docelowe (lub strumienie) i działa w trybie strumieniowym, więc plik źródłowy nigdy nie jest w pełni materializowany w pamięci. Gdy PDF (lub inny format docelowy) jest gotowy, przeglądarka otwiera go przy użyciu tej samej techniki leniwego ładowania opisanej wcześniej.

Kontrolowane drukowanie – unikaj rasteryzacji całego dokumentu

Podczas drukowania dużych plików PDF, Doconut strumieniuje zadania drukowania strona po stronie do sterownika drukarki. To podejście pozwala egzekwować limity lub znaki wodne bez konieczności wczytywania całego dokumentu do RAM.

Skalowanie na poziomie przedsiębiorstwa

ScenariuszTechnika oszczędzania pamięci Doconut
Konwersja wsadowa 10 000 plików OfficeUżyj pracowników w tle z konwersją opartą na strumieniach; każdy pracownik obsługuje jeden plik naraz, utrzymując niskie zużycie RAM.
Drukowanie na żądanie rysunków CAD pięciocyfrowychDrukuj za pomocą strumienia stron; nie wymaga pełnej rasteryzacji rysunku.
Portal SaaS wielodzierżawczyOddzielne kolejki konwersji dla każdego najemcy; izolacja pamięci jest automatyczna, ponieważ każde zadanie pracuje na własnym strumieniu.

Najlepsze praktyki skalowania Doconut w środowiskach przedsiębiorstw

Nawet przy silniku oszczędzającym pamięć, rzeczywiste wdrożenia wymagają kilku zabezpieczeń. Poniżej znajdują się sprawdzone praktyki, które wzmacniają wbudowane zalety Doconut.

1. Ogranicz rozmiar pamięci podręcznej stron na sesję

Skonfiguruj przeglądarkę, aby przechowywała w pamięci tylko najnowsze strony. Zmniejszenie rozmiaru pamięci podręcznej bezpośrednio obniża zużycie RAM na sesję.

2. Uruchamiaj OCR i konwersję w odizolowanych mikro‑usługach

Wdroż Wtyczkę Search i Wtyczkę Converter jako oddzielne kontenery za kolejką komunikatów (RabbitMQ, Azure Service Bus itp.). To izoluje skoki pamięci i pozwala automatycznie skalować każdy komponent niezależnie.

3. Włącz Trim i ReadyToRun w .NET 6

Podczas publikowania swojego API opartego na Doconut, włącz przycinanie, aby usunąć nieużywany IL i zmniejszyć rozmiar binarki:

dotnet publish -c Release -r win-x64 --self-contained true /p:PublishTrimmed=true

Wnioski

Optymalizacja zużycia pamięci jest niezbędna dla każdej rozwiązania do przeglądania dokumentów w dużej skali. Korzystając z architektury z priorytetem strumieni, rdzenia zoptymalizowanego pod zależnościami oraz wtyczek anotacji/OCR na żądanie Doconut, możesz utrzymać przewidywalne zużycie RAM, jednocześnie zapewniając szybkie i responsywne doświadczenia przeglądania. Wdrożenie zalecanych praktyk — rozproszona pamięć podręczna tokenów, ograniczone buforowanie stron, izolacja mikro‑usług i przycięte kompilacje — odblokuje pełny potencjał skalowalności Doconut.

Gotowy, aby zobaczyć różnicę sam? Rozpocznij bezpłatną wersję próbną Doconut już dziś i doświadcz niskiego zużycia pamięci oraz wysokiej wydajności przeglądania dokumentów w swoich aplikacjach .NET.

#document viewer#performance#.NET#enterprise#Doconut#przeglądarka dokumentów#wydajność#przedsiębiorstwo