Ограничения ресурсов и оптимизация производительности надстроек Office

Чтобы обеспечить максимальное удобство работы для пользователей, разработчику необходимо убедиться, что надстройка Office работает в заданных пределах использования ЦП и памяти, что она достаточно надежна, а в случае надстроек Outlook еще и проверить время ответа при оценке регулярных выражений. Эти ограничения на использование ресурсов среды выполнения применяются только к надстройкам, запущенным в клиентах Office для Windows и OS X, но не в мобильных приложениях или браузере.

Вы также можете оптимизировать работу надстроек на мобильных устройствах и компьютерах, оптимизировав использование ресурсов в проекте и реализации.

Ограничения на использование ресурсов для надстроек

Ограничения использования ресурсов во время работы применяются к всем типам Office надстройки. Эти ограничения помогают обеспечить производительность для пользователей и уменьшить количество атак с отказом в обслуживании. Убедитесь, что Office надстройка на целевом приложении Office с помощью диапазона возможных данных, а также измеряйте ее производительность в соответствии со следующими ограничениями по времени выполнения.

  • Загрузка ядра ЦП. Загрузка одного ядра ЦП не должна превышать 90 % (проверяется три раза с интервалом 5 секунд).

    Интервал по умолчанию для Office для проверки использования основного процессора составляет каждые 5 секунд. Если Office обнаруживает, что использование надстройки в центре процессора превышает пороговое значение, оно отображает сообщение с вопросом о том, хочет ли пользователь продолжить запуск надстройки. Если пользователь решил продолжить, клиент Office не спрашивает пользователя снова во время этого сеанса редактирования. С помощью раздела реестра AlertInterval администраторы могут повысить пороговое значение, чтобы это сообщение отображалось реже, если пользователи работают с надстройками, требующими больших затрат ресурсов ЦП.

  • Использование памяти. Пороговое значение использования памяти по умолчанию, которое определяется динамически на основе доступной физической памяти устройства.

    По умолчанию, когда клиент Office обнаруживает, что физическое использование памяти на устройстве превышает 80% доступной памяти, клиент начинает следить за использованием памяти надстройки на уровне документов для надстройок контента и области задач и на уровне почтовых ящиков для Outlook надстройки. С интервалом в 5 секунд по умолчанию клиент предупреждает пользователя о том, что использование физической памяти для набора надстроек на уровне документа или почтового ящика превышает 50%. Этот предел использования памяти рассчитан для физической, а не виртуальной памяти, и позволяет обеспечить производительность на устройствах с ограниченной оперативной памятью, таких как планшеты. Администраторы могут переопределять этот динамический параметр с явным ограничением с помощью ключа реестра MemoryAlertThreshold Windows в качестве глобального параметра, а также настроить интервал оповещения с помощью клавиши AlertInterval в качестве глобального параметра.

  • Устойчивость к сбоям. По умолчанию надстройка должна давать сбой не более четыре раз.

    Администраторы могут настраивать предельное количество сбоев с помощью раздела реестра RestartManagerRetryLimit.

  • Блокирование надстройки. Отсутствие ответа должно длиться не более 5 секунд.

    Это влияет на пользовательский опыт надстройки и Office приложения. В этом случае Office автоматически перезапускает все активные надстройки для документа или почтового ящика (если это применимо) и предупреждает пользователя о том, какие надстройки стали неответветными. Этот порог может достигаться, если надстройка нерегулярно использует вычислительные ресурсы при выполнении длительных задач. Существуют методики, позволяющие избежать блокировки. Администраторы не могут переопределять это пороговое значение.

Надстройки Outlook

Если какая-либо надстройка Outlook превышает описанные пороговые значения, касающиеся числа сбоев или использования ЦП и памяти, Outlook отключает надстройку. В Центре администрирования Exchange состояние надстройки отображается как "Отключено".

Примечание

Хотя только полнофункциональные клиенты Outlook (не Outlook в Интернете или для мобильных устройств) отслеживают использование ресурсов, если полнофункциональный клиент отключит надстройку Outlook, эта надстройка также будет отключена в Outlook в Интернете и для мобильных устройств.

Помимо правил ЦП, памяти и надежности, Outlook надстройки должны соблюдать следующие правила активации.

  • Время ответа при оценке регулярных выражений. По умолчанию Outlook должна оценивать все регулярные выражения в манифесте надстройки Outlook не более 1000 миллисекунд. При превышении этого значения Outlook повторит оценку позже.

    С помощью групповой политики или параметров приложения в реестре Windows администраторы могут настроить это пороговое значение по умолчанию в 1000 миллисекунд с помощью параметра OutlookActivationAlertThreshold.

  • Переоценка регулярных выражений — ограничение по умолчанию в три Outlook для повторной оценки всех регулярных выражений в манифесте. Если оценка не удается все три раза, превысив допустимый порог (который является либо по умолчанию 1000 миллисекунд, либо значение, указанное OutlookActivationAlertThreshold, если этот параметр существует в реестре Windows), Outlook отключает надстройку Outlook. Центр администрирования Exchange отображает состояние отключения, а надстройка отключена для использования в Outlook клиентах, а также на Outlook в Интернете и мобильных устройствах.

    С помощью групповой политики или параметра приложения в реестре Windows администраторы могут настроить это число попыток оценки, используя параметр OutlookActivationManagerRetryLimit.

Надстройки Excel

Если вы строите надстройку Excel, следует помнить о следующих ограничениях размера при взаимодействии с книгой.

  • В Excel в Интернете действует ограничение в 5 МБ на размер полезных данных запросов и откликов. При превышении этого ограничения возникает ошибка RichAPI.Error.
  • Диапазон для получения операций ограничен пятью миллионами ячеек.

Если вы ожидаете, что пользовательский ввод превысит эти ограничения, обязательно проверьте данные перед context.sync() вызовом. Разделите операцию на мелкие части по мере необходимости. Не забудьте вызвать каждую под операцию, чтобы избежать повторного пакета этих context.sync() операций.

Эти ограничения обычно превышаются большими диапазонами. Возможно, ваша надстройка сможет использовать RangeAreas для стратегического обновления ячеек в более широком диапазоне. Дополнительные сведения о работе с несколькими диапазонами см. в Excel RangeAreas надстройки. Дополнительные сведения об оптимизации размера полезной нагрузки в Excel см. в Excel.

Надстройки области задач и контентные надстройки

Если любое содержимое или надстройка области задач превышает предшествующие пороговые значения для Ядра ЦП или использования памяти, или ограничение допуска при сбоях, соответствующее приложение Office отображает предупреждение для пользователя. В этот момент пользователь может сделать одно из следующих действий:

  • Перезапустить надстройку.
  • Отменить дальнейшие оповещения о превышении заданного порога. В идеальном случае пользователь должен удалить надстройку из документа. Продолжение работы с приложением может вызвать дальнейшие проблемы производительности и стабильности.

Проверка проблем с использованием ресурсов в журнале телеметрии

Office предоставляет журнал телеметрии, который поддерживает запись определенных событий (загрузку, открытие, закрытие и ошибки) решений Office, работающих на локальном компьютере, включая проблемы использование ресурсов в Надстройка Office. Если у вас настроен журнал телеметрии, вы можете использовать Excel для открытия журнала телеметрии в следующем расположении по умолчанию на локальном диске.

%Users%\<Current user>\AppData\Local\Microsoft\Office\15.0\Telemetry

Для каждого события надстройки, которое регистрируется в журнале телеметрии, определяются дата и время возникновения, идентификатор, серьезность, краткий описательный заголовок, понятное имя, уникальный идентификатор надстройки и приложение, внесшее сведения об этом событии в журнал. Вы можете обновить журнал телеметрии, чтобы увидеть текущие отслеживаемые события. В таблице ниже приведены примеры надстроек Outlook, которые отслеживались в журнале телеметрии.

Дата/время Код события Серьезность Название Файл ИД Приложение
8.10.2012 17:57:10 7 Манифест надстройки загружен успешно Who's Who 69cc567c-6737-4c49-88dd-123334943a22 Outlook
8.10.2012 17:57:01 7 Манифест надстройки загружен успешно LinkedIn 333bf46d-7dad-4f2b-8cf4-c19ddc78b723 Outlook

В таблице ниже приведен общий список событий, которые отслеживаются в журнале телеметрии для надстроек Office.

Код события Название Серьезность Описание
7 Манифест надстройки загружен успешно Манифест надстройки Office успешно загружается и читается Office приложением.
8 Манифест надстройки не загружен Критический Приложение Office не удалось загрузить файл манифеста для надстройки Office из каталога SharePoint, корпоративного каталога или AppSource.
9 Не удается выполнить анализ разметки надстройки Критическая Приложение Office загрузил манифест Office надстройки, но не могло прочитать HTML-разметку приложения.
10 Надстройка использует слишком много ресурсов ЦП Критическая Приложение Надстройка Office использовало более 90 % ресурсов ЦП за конечный промежуток времени.
15 Тайм-аут поиска строки привел к отключению надстройки Надстройки Outlook выполняют поиск строки темы и основной части электронного сообщения, чтобы определить, требуется ли их отображать с использованием регулярного выражения. Клиент Outlook отключил надстройку Outlook, указанную в столбце Файл, из-за многократного превышения времени ожидания при попытке сопоставления регулярного выражения.
18 Надстройка успешно закрыта Приложение Office успешно закрыть Office надстройки.
19 Надстройка обнаружила ошибку времени выполнения Критический Приложение Надстройка Office столкнулось с проблемой и завершилось со сбоем. Для получения дополнительных сведений просмотрите журнал оповещений Microsoft Office с помощью средства просмотра событий Windows на том компьютере, где возникла ошибка.
20 Сбой надстройки при проверке лицензирования Критический Не удалось проверить сведения о лицензировании для приложения Надстройка Office, возможно, срок их действия истек. Для получения дополнительных сведений просмотрите журнал оповещений Microsoft Office с помощью средства просмотра событий Windows на том компьютере, где возникла ошибка.

Дополнительные сведения см. в разделах Развертывание панели мониторинга телеметрии и Устранение неполадок с файлами Office и пользовательскими решениями с помощью журнала телеметрии

Методы проектирования и реализации

Хотя ресурсные ограничения на использование ЦП и памяти, число сбоев и время ответа пользовательского интерфейса применяются только к Надстройки Office, работающим только на клиентах с расширенными возможностями, оптимизация использования этих ресурсов и батареи должна быть приоритетной задачей, если требуется удовлетворительная работа надстройки на всех поддерживаемых клиентах и устройствах. Оптимизация особенно важна, если надстройка выполняет длительные операции или обрабатывает большие наборы данных. В следующем списке предлагаются некоторые методы, которые позволяют разбить операции с интенсивным процессором или данными на более мелкие куски, чтобы надстройка не потребления ресурсов чрезмерно, а Office приложение оставалось отзывчивым.

  • В сценарии, где надстройке требуется читать большой объем из неограниченного набора данных, можно применить разбиение на страницы во время чтения данных из таблицы или уменьшить размер данных в каждой небольшой операции чтения вместо попыток выполнить чтение за одну операцию. Это можно сделать с помощью метода setTimeout глобального объекта, чтобы ограничить продолжительность ввода и вывода. It also handles the data in defined chunks instead of randomly unbounded data. Другой вариант — использовать async для обработки обещаний.

  • Если надстройка использует требовательный к ресурсам ЦП алгоритм для обработки большого объема данных, вы можете использовать рабочие веб-процессы для выполнения длительной задачи в фоновом режиме и при этом на переднем плане выполнять отдельный скрипт, например, для отображения хода выполнения в пользовательском интерфейсе. Рабочие веб-процессы не блокируют действия пользователя и позволяют HTML-странице отвечать на запросы. Пример рабочих веб-процессов приводится в статье Основные сведения о рабочих веб-процессах. Дополнительные сведения об API рабочих веб-процессов см. в статье Рабочие веб-процессы.

  • Если надстройка использует требовательный к ресурсам ЦП алгоритм, но вы можете разделить входные или выходные данные на небольшие наборы, рассмотрите возможность создать веб-службу и передать туда данные, чтобы разгрузить ЦП, и подождите асинхронный обратный вызов.

  • Протестируйте надстройку с самым большим ожидаемым объемом данных и запретите обработку большего объема.

Улучшения производительности с помощью API, определенных приложениям

Советы по производительности при использовании модели API, определенной для приложений, предоставляют рекомендации по использованию API для Excel, OneNote, Visio и Word. В общем, следует:

Нежелательные объекты прокси

Прокси-объекты сохраняются в памяти до RequestContext.sync() тех пор, пока не будут вызваны. Операции с большими пакетами могут создавать много прокси-объектов, необходимых надстройке лишь один раз, которые можно удалить из памяти до выполнения пакетных действий.

Метод untrack() освобождает объект из памяти. Этот метод реализуется на многих прокси-объектах API, определенных для приложений. Вызов после выполнения надстройки с объектом должен принести заметное преимущество производительности при использовании untrack() большого количества прокси-объектов.

Примечание

Range.untrack() — это ярлык для ClientRequestContext.trackedObjects.remove(thisRange). Отслеживание любого прокси-объекта можно прекратить, удалив его из списка отслеживаемых объектов в контексте.

Следующий пример Excel заполняет выбранный диапазон данными по одной ячейке. После добавления значения в ячейку, диапазон отображает, что отслеживание ячейки прекращено. Выполните этот код с выбранным диапазоном от 10 000 до 20 000 ячеек сначала со строкой cell.untrack(), а затем без нее. Вы должны заметить, что код выполняется с использованием строки cell.untrack() быстрее, чем без нее. Вы также можете заметить уменьшение времени отклика впоследствии, так как этап очистки занимает меньше времени.

Excel.run(async (context) => {
    var largeRange = context.workbook.getSelectedRange();
    largeRange.load(["rowCount", "columnCount"]);
    await context.sync();

    for (var i = 0; i < largeRange.rowCount; i++) {
        for (var j = 0; j < largeRange.columnCount; j++) {
            var cell = largeRange.getCell(i, j);
            cell.values = [[i *j]];

            // Call untrack() to release the range from memory.
            cell.untrack();
        }
    }

    await context.sync();
});

Обратите внимание, что необходимость отоблести объектов становится важной только при работе с тысячами из них. Большинству надстройок не потребуется управлять отслеживанием прокси-объектов.

См. также