Оптимізація використання пам'яті у масштабних додатках для перегляду документів
← Back to Blog7 min read

Оптимізація використання пам'яті у масштабних додатках для перегляду документів

Оптимізація використання пам'яті у масштабних .NET переглядачах документів з Doconut
Оптимізація використання пам'яті у масштабних .NET переглядачах документів з Doconut

Маєте тисячі PDF‑файлів, Office‑документів або CAD‑чертежів, які потрібно показати в .NET‑порталі? І не хочете, щоб ваш сервер залишився без ОЗУ? Хитрість полягає в поєднанні відкладеного потокового доступу, цільових плагінів та оптимізованого конвеєра рендерингу Doconut. У наступних розділах ми розглянемо проблеми, пов’язані з пам’яттю, які виникають у корпоративних, документомістких додатках, а потім покажемо, як Doconut — універсальний переглядач документів для .NET‑бекендів — розв’язує вузькі місця, що заважають традиційним переглядачам масштабуватись. О, і є безкоштовний пробний період, який чекає, якщо ви хочете побачити вигоди у власному середовищі.


Розуміння навантаження пам'яті у .NET переглядачах документів

Великі портали часто завантажують увесь файл у пам'ять ще до того, як з'явиться перша сторінка. 200 МБ CAD‑чертеж або PDF‑документ у 500 сторінок швидко переповнює збирач сміття .NET, викликає повні паузи GC і змушує вас надмірно підвищувати ресурси серверів.

Чому типова модель рендерингу .NET шкодить масштабованості

СимптомТипова причина в наївних реалізаціях
Винятки через нестачу пам'ятіБайтові масиви всього файлу, що зберігаються у статичному кеші
Повільне завантаження першої сторінкиДекодування всього документа перед рендерингом
Недостатність пулу потоківТривале CPU‑залежне рендеринг блокує асинхронні конвеєри
Непередбачувані сплески затримкиЗбірка GC великих закріплених об’єктів

Додайте annotation або OCR плагіни, які накопичують бітмапи зображень, і навантаження множиться. Оптимальним є обробляти лише те, що користувач потребує саме зараз, і тримати кожний проміжний буфер короткоживучим.

Відповідь Doconut: легке, оптимізоване за залежностями ядро

Архітектура Doconut на базі .NET 6 була перебудована, щоб зменшити виділення пам'яті в купі:

  • Оптимізація залежностей – бібліотека завантажує лише ті модулі рендерингу, які потрібні для поточного типу файлу (PDF, Office, CAD, зображення). Невикористані плагіни залишаються поза пам'яттю, зберігаючи процес дуже компактним.
  • Дизайн «потік‑перше» – файли відкриваються як потоки, а не як цілі байтові масиви, тому середовище виконання може підвантажувати дані з диска за потребою.
  • Підтримка фонових завдань – важкі завдання конвертації можна передати у воркер‑процеси або Azure Functions, залишаючи веб‑шару вільною для інтерактивного перегляду.

Коли ви інтегруєте переглядач у асинхронні патерни .NET, Doconut дозволяє обслуговувати тисячі одночасних сесій на скромному кластері ВМ.


Як увімкнути відкладене завантаження

  1. Зареєструйте проміжне ПЗ Doconut у вашому конвеєрі ASP.NET Core. Підсистема перехоплює запити переглядача і підключає необхідні сервіси.
  2. Відкривайте документи як потоки замість завантаження цілого файлу. Метод Doconut OpenDocument приймає шлях до файлу або потік і повертає токен, що представляє відкритий документ.
  3. Запитуйте сторінки за потребою з клієнтської частини. Коли фронтенд запитує конкретну сторінку, Doconut читає лише потрібні об’єкти, рендерить растрове зображення і повертає легкий мініатюрний варіант.

Оскільки переглядач працює з потоками, ви можете зберігати файли в Azure Blob Storage, Amazon S3 або локальній NAS без копіювання їх на локальний диск веб‑сервера. ОС виконує підвантаження, а .NET‑runtime тримає лише малі буфери, необхідні для активної сторінки.

Переваги для масштабних розгортань

ПеревагаЯк Doconut досягає цього
Передбачуване використання ОЗУФіксований кеш сторінок + доступ лише до потоків
Швидке рендеринг першої сторінкиЧитає лише заголовок документа і об’єкти першої сторінки
Масштабованість у різних браузерахТака ж логіка потокового доступу працює для HTML5/React, Angular або Vue фронтендів
Зменшений тиск на збирач сміттяНемає великих закріплених байтових масивів; всі буфери короткоживучі

Поєднайте відкладене завантаження з фоновими завданнями конвертації, і веб‑шар ніколи не буде зависати через важкі трансформації.


Плагіни .NET для анотацій та OCR без зайвих витрат

Підприємства люблять annotation і OCR з можливістю пошуку, проте наївний підхід зберігає повнорозмірний бітмап кожної сторінки в пам'яті лише для малювання виділень або розпізнавання тексту. Модель плагінів Doconut ізолює ці функції в незалежні, за запитом активовані сервіси.

Анотація – легке, по‑сторінкове управління

Коли сторінка завантажується, ви отримуєте менеджер анотацій, який зберігає лише векторні дані (координати, стиль, нотатки). Додавання штампу або виділення оновлює цей векторний сховок; базовий бітмап ніколи не дублюється. Doconut повторно рендерить сторінку з накладенням лише за запитом клієнта, тому навіть PDF у 500 сторінок з тисячами анотацій споживає лише частину пам'яті, яку бітмап‑центричне рішення вимагало б.

OCR – витяг тексту «на льоту»

Search Plugin виконує OCR лише на сторінках, до яких користувач прокручує. Ви задаєте бажану роздільну здатність зображення (наприклад, 200 dpi) у параметрах документа, і Doconut витягує текст для поточної сторінки, зберігаючи результат у стисненому індексі, прив’язаному до токену документа. Процес OCR відокремлений від рендерингу, що дозволяє горизонтально масштабувати його (наприклад, через Azure Functions) без збільшення пам'яті веб‑сервера, який обслуговує переглядач.

Чому це важливо для великих підприємств

  • Передбачувана вартість – анотації та OCR працюють по‑сторінково, а не по‑документу, зберігаючи використання пам'яті лінійним щодо видимого вмісту.
  • Готовність до відповідності – анотації зберігаються у XML, що спрощує аудит або редагування.
  • Безпека багатокористувацької (мульти‑тенант) архітектури – токен кожного орендаря ізолює його OCR‑індекс, запобігаючи витоку даних між орендарями.

Конверсія на боці сервера та контрольоване друкування: ефективне управління навантаженням

Багато порталів потребують конвертувати Office‑файли, CAD‑чертежі або електронні листи у PDF або зображення для уніфікованого рендерингу. Поширена помилка — виконувати конвертацію в процесі, що різко підвищує ОЗУ та CPU, поки користувач чекає. Converter Plugin Doconut переносить важку роботу у серверний сервіс, який можна горизонтально масштабувати.

Конвертація без завантаження всього вихідного файлу

API конвертації приймає шляхи (або потоки) джерела та цілі і працює у потоковому режимі, тому вихідний файл ніколи не матеріалізується повністю в пам'яті. Після створення PDF (або іншого формату) переглядач відкриває його за тією ж технологією відкладеного завантаження, описаною вище.

Контрольоване друкування – уникнення повного растеризування документа

При друку великих PDF‑файлів Doconut передає завдання друку сторінка‑за‑сторінкою драйверу принтера. Такий підхід дозволяє впроваджувати квоти або водяні знаки без необхідності завантажувати весь документ у RAM.

Масштабування корпоративного рівня

СценарійТехніка економії пам'яті Doconut
Пакетна конвертація 10 000 Office‑файлівВикористовуйте фонових воркерів з потоковою конвертацією; кожен воркер обробляє один файл одночасно, зберігаючи ОЗУ низьким.
Друк за запитом 5‑цифрових CAD‑чертежівДрук через потокову передачу сторінок; не потрібен повний растеризований чертеж.
SaaS‑портал з багатьма орендарямиОкремі черги конвертації для кожного орендаря; ізоляція пам'яті автоматична, оскільки кожне завдання працює зі своїм потоком.

Кращі практики масштабування Doconut у корпоративному середовищі

Навіть при використанні пам'яттєво‑ефективного ядра реальні розгортання потребують певних обмежень. Нижче наведено перевірені практики, які підсилюють вбудовані можливості Doconut.

1. Обмежте розмір кешу сторінок на сесію

Налаштуйте переглядач так, щоб у пам'яті залишалися лише найновіші сторінки. Зменшення розміру кешу безпосередньо знижує споживання ОЗУ на сесію.

2. Запускайте OCR та конвертацію в ізольованих мікросервісах

Розгорніть Search Plugin та Converter Plugin у окремих контейнерах за чергою повідомлень (RabbitMQ, Azure Service Bus тощо). Це ізолює піки пам'яті і дозволяє автоскейлити кожен компонент окремо.

3. Увімкніть Trim та ReadyToRun у .NET 6

При публікації вашого API на базі Doconut увімкніть обрізання, щоб видалити невикористаний IL і зменшити розмір бінарника:

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

Менший бінарник — менший робочий набір, що означає менше ОЗУ на контейнер.


Висновок

Оптимізація використання пам'яті є критичною для будь‑якого масштабного рішення перегляду документів. Використовуючи stream‑first архітектуру, оптимізоване за залежностями ядро та плагіни анотацій/OCR за запитом Doconut дозволяє підтримувати передбачуване споживання ОЗУ, забезпечуючи швидкий і реактивний перегляд. Впровадьте рекомендовані практики — розподілений кеш токенів, обмежений кеш сторінок, мікросервісна ізоляція та обрізані збірки, і ви розкриєте повний потенціал масштабованості Doconut.

Готові побачити різницю самі? Розпочніть безкоштовний пробний період Doconut сьогодні і відчуйте низькоспоживчий, високопродуктивний перегляд документів у ваших .NET‑застосунках.

#document viewer#performance#.NET#enterprise#Doconut#переглядач документів#продуктивність#підприємство