Limites de recurso e otimização de desempenho para Suplementos do Office
Os suplementos de qualidade têm de ser executados dentro de requisitos específicos para utilização do núcleo da CPU, utilização da memória, fiabilidade e, para suplementos do Outlook, tempo de resposta de avaliação de expressão regular. Estes limites ajudam a garantir o desempenho dos seus utilizadores e a mitigar ataques denial-of-service. Certifique-se de que testa o seu Suplemento do Office na sua aplicação de destino do Office através de um intervalo de dados possíveis e mede o desempenho em relação aos seguintes limites de utilização de tempo de execução.
Limites de uso de recursos para suplementos
Os seguintes limites de recursos de runtime aplicam-se a todos os suplementos em execução em clientes do Office no Windows e Mac, mas não em aplicações móveis ou num browser.
Utilização do núcleo da CPU – um único limiar de utilização do núcleo da CPU de 90%, observado 3 vezes em intervalos de 5 segundos por predefinição.
Se o cliente do Office detetar que a utilização do núcleo da CPU de um suplemento está acima do valor de limiar, será apresentada uma mensagem a perguntar se o utilizador quer continuar a executar o suplemento. Se o utilizador optar por continuar, o cliente do Office não volta a perguntar ao utilizador durante essa sessão de edição. O intervalo predefinido para um cliente do Office marcar utilização do núcleo da CPU é de 5 em 5 segundos. Os administradores podem utilizar a chave de registo AlertInterval para aumentar o limiar para reduzir a apresentação desta mensagem de aviso se os utilizadores executarem suplementos com utilização intensiva da CPU.
Uso de memória: um limite de uso de memória padrão que é determinado dinamicamente com base na memória física disponível do dispositivo.
Por predefinição, quando um cliente do Office deteta que a utilização da memória física num dispositivo excede 80% da memória disponível, o cliente começa a monitorizar a utilização da memória do suplemento. Isto é feito ao nível do documento para suplementos de conteúdo e painel de tarefas e ao nível da caixa de correio para suplementos do Outlook. Num intervalo predefinido de 5 segundos, o cliente avisa o utilizador se a utilização da memória física para um conjunto de suplementos ao nível do documento ou da caixa de correio exceder os 50%. Este limite de utilização de memória utiliza memória física e não virtual para garantir o desempenho em dispositivos com RAM limitada, como tablets. Os administradores podem substituir esta definição dinâmica por um limite explícito através da chave de registo MemoryAlertThreshold do Windows como uma definição global. Também podem ajustar o intervalo de alertas com a chave AlertInterval .
Tolerância a falhas – um limite predefinido de 4 falhas durante a sessão do documento.
Os administradores podem ajustar o limite para casos de falha usando a chave de registro RestartManagerRetryLimit.
Bloqueio de aplicações – um limiar de falta de resposta prolongado de 5 segundos.
Isto afeta as experiências do utilizador do suplemento e da aplicação do Office. Quando isto ocorre, a aplicação do Office reinicia automaticamente todos os suplementos ativos de um documento ou caixa de correio (quando aplicável) e avisa o utilizador que o suplemento deixou de responder. Os suplementos atingem este limiar quando não produzem regularmente o processamento enquanto realizam tarefas de execução prolongada. Existem técnicas listadas mais adiante neste artigo para ajudar a garantir que o suplemento não bloqueia a aplicação do Office. Os administradores não podem substituir esse limite.
Suplementos do painel de tarefas e de conteúdo
Se algum suplemento de conteúdo ou painel de tarefas exceder os limiares anteriores no núcleo da CPU ou na utilização da memória, ou o limite de tolerância para falhas, a aplicação do Office correspondente apresenta um aviso para o utilizador. Nesse momento, o usuário poderá executar uma destas ações:
- Reiniciar o suplemento.
- Cancele mais alertas sobre exceder esse limiar. Idealmente, o utilizador deve, em seguida, eliminar o suplemento do documento. A utilização contínua do suplemento correria o risco de problemas de desempenho e estabilidade adicionais.
Suplementos do Outlook
Se um suplemento do Outlook exceder os limiares anteriores para utilização do núcleo da CPU ou da memória ou o limite de tolerância para falhas, o suplemento fica indisponível. O Exchange Administração Center apresenta a status do suplemento.
Observação
Apesar de apenas o Outlook no Windows (clássico) e no Mac monitorizarem a utilização de recursos, se um destes clientes tornar um suplemento do Outlook indisponível, esse suplemento também ficará indisponível no Outlook na Web, em dispositivos móveis e no novo Outlook no Windows.
Além das regras de núcleo, memória e fiabilidade da CPU, os suplementos do Outlook devem observar as seguintes regras de ativação.
Tempo de resposta de expressões regulares: um limite padrão de 1.000 milissegundos para que o Outlook avalie todas as expressões regulares no manifesto de um suplemento do Outlook. Exceder o limite faz com que o Outlook repita a avaliação posteriormente.
Os administradores podem ajustar este valor de limiar predefinido de 1000 milissegundos ao utilizar uma política de grupo ou uma definição específica da aplicação para a chave OutlookActivationAlertThreshold no registo do Windows.
Reavaliação de expressões regulares – um limite predefinido de 3 vezes para o Outlook reavaliar todas as expressões regulares num manifesto. Se a avaliação não for avaliada dentro do limite de tempo 3 vezes, o Outlook torna o suplemento indisponível.
os administradores podem ajustar este número de vezes para repetir a avaliação utilizando uma política de grupo ou uma definição específica da aplicação para a chave OutlookActivationManagerRetryLimit no registo do Windows.
Suplementos do Excel
Os suplementos do Excel têm limites de transferência de dados importantes ao interagir com o livro.
- O Excel na Web tem um limite de tamanho de conteúdo para solicitações e respostas de 5 MB.
RichAPI.Error
será lançado se esse limite for excedido. - Um intervalo está limitado a 5000 000 células para operações de leitura.
Se espera que a entrada do utilizador exceda estes limites, marcar os dados antes de chamar context.sync()
. Divida a operação em partes mais pequenas, conforme necessário. Chame context.sync()
cada sub-operação para evitar que essas operações sejam novamente agrupadas.
Normalmente, estes limites são excedidos por grandes intervalos. O seu suplemento poderá ser capaz de utilizar o RangeAreas para atualizar estrategicamente células num intervalo maior. Para obter mais informações sobre como trabalhar com RangeAreas
o , consulte Trabalhar com vários intervalos em simultâneo nos suplementos do Excel. Para obter informações adicionais sobre como otimizar o tamanho do payload no Excel, veja Melhores práticas de limite de tamanho do payload.
Verificar problemas de utilização de recursos no Registo de Telemetria
O Office fornece um Registo de Telemetria que mantém um registo de determinados eventos (carregamento, abertura, fecho e erros) para soluções do Office em execução no computador local. Isto inclui problemas de utilização de recursos num Suplemento do Office. Se tiver o Registo de Telemetria configurado, pode utilizar o Excel para abrir o Registo de Telemetria na seguinte localização predefinida na unidade local.
%Users%\<Current user>\AppData\Local\Microsoft\Office\16.0\Telemetry
Para cada evento que o Log de Telemetria acompanha para um suplemento, há a data/hora de ocorrência, a ID do evento, a severidade e o título descritivo curto do evento, o nome amigável e a ID exclusiva do suplemento, e o aplicativo que registrou em log o evento. Atualize o Registo de Telemetria para ver os eventos monitorizados atuais. A tabela a seguir mostra exemplos de suplementos do Outlook que foram acompanhados no log de Telemetria.
Data/Hora | ID do Evento | Severity | Título | Arquivo | ID | Application |
---|---|---|---|---|---|---|
8/10/2022 17:57:10 | 7 | Não aplicável | manifesto de suplemento baixado com êxito | Quem é quem | 69cc567c-6737-4c49-88dd-123334943a22 | Outlook |
8/10/2022 17:57:01 | 7 | Não aplicável | manifesto de suplemento baixado com êxito | 333bf46d-7dad-4f2b-8cf4-c19ddc78b723 | Outlook |
A tabela seguinte lista os eventos que o Registo de Telemetria controla para suplementos do Office.
ID do Evento | Título | Severity | Descrição |
---|---|---|---|
7 | Manifesto de suplemento baixado com êxito | Não aplicável | O manifesto do Suplemento do Office foi carregado e lido com êxito pela aplicação do Office. |
8 | Manifesto de suplemento não baixado | Crítico | A aplicação do Office não conseguiu carregar o ficheiro de manifesto do Suplemento do Office a partir do catálogo do SharePoint, catálogo empresarial ou AppSource. |
9 | Não foi possível analisar a marcação do suplemento | Crítico | A aplicação do Office carregou o manifesto do Suplemento do Office, mas não conseguiu ler a marcação HTML da aplicação. |
10 | O suplemento usou CPU em excesso | Crítico | O suplemento do Office usou mais de 90% dos recursos da CPU em um período de tempo finito. |
15 | Suplemento desabilitado porque esgotou o tempo limite na pesquisa de cadeia de caracteres | Não aplicável | Os suplementos do Outlook pesquisam a linha de assunto e a mensagem de um e-mail para determinar se devem ser exibidas usando uma expressão regular. O suplemento do Outlook listado na coluna Ficheiro foi desativado pelo Outlook porque excedeu o tempo limite repetidamente ao tentar corresponder a uma expressão regular. |
18 | Suplemento fechado com êxito | Não aplicável | A aplicação do Office conseguiu fechar o Suplemento do Office com êxito. |
19 | O suplemento encontrou um erro de tempo de execução | Crítico | O suplemento do Office teve um problema que causou sua falha. Para obter mais detalhes, veja o registo alertas do Microsoft Office através da Visualizador de Eventos do Windows no computador que encontrou o erro. |
20 | Falha ao verificar a licença do suplemento | Crítico | As informações de licenciamento do suplemento do Office não puderam ser verificadas e podem ter expirado. Para obter mais detalhes, veja o registo alertas do Microsoft Office através da Visualizador de Eventos do Windows no computador que encontrou o erro. |
Saiba mais em Implantar o Painel de Telemetria e Solução de problemas de arquivos do Office e soluções personalizadas com o log de telemetria.
Técnicas de design e implementação
Embora os limites de recursos na utilização da CPU e da memória, a tolerância a falhas e a capacidade de resposta da IU se apliquem aos Suplementos do Office em execução apenas em clientes de ambiente de trabalho do Office, a otimização deve ser uma prioridade se quiser que o seu suplemento tenha um desempenho satisfatório em todos os clientes e dispositivos de suporte. A otimização é particularmente importante se o suplemento efetua operações de longa duração ou lida com grandes conjuntos de dados. A lista seguinte sugere algumas técnicas para dividir operações intensivas de CPU ou de utilização intensiva de dados em segmentos mais pequenos para que o seu suplemento evite o consumo excessivo de recursos e mantenha a aplicação do Office reativa.
Se o suplemento precisar de ler um grande volume de dados de um conjunto de dados não vinculado, pode aplicar paginação ao ler os dados de uma tabela ou reduzir o tamanho dos dados em cada operação de leitura mais curta, em vez de tentar concluir a leitura numa única operação. Pode fazê-lo através do método setTimeout do objeto global para limitar a duração da entrada e da saída. Também lida com os dados em blocos definidos, em vez dos dados não associados aleatoriamente. Outra opção é utilizar assíncrona para processar as suas Promessas.
Se o suplemento utilizar um algoritmo intensivo de CPU para processar um grande volume de dados, pode utilizar as funções de trabalho da Web para executar a tarefa de execução prolongada em segundo plano enquanto executa um script separado em primeiro plano, como apresentar o progresso na interface de utilizador. Os Web workers não bloqueiam atividades do usuário e permitem que a página HTML continue respondendo. Para obter um exemplo de Web workers, confira Noções básicas de Web workers.
Se o suplemento utilizar um algoritmo intensivo de CPU, mas puder dividir a entrada ou saída de dados em conjuntos mais pequenos, considere criar um serviço Web, transmitir os dados para o serviço Web para descarregar a CPU e aguardar uma chamada de retorno assíncrona.
Teste o suplemento em relação ao maior volume de dados esperado e restrinja o suplemento a processar até esse limite.
Melhorias de desempenho com as APIs específicas da aplicação
As sugestões de desempenho em Utilizar o modelo de API específico da aplicação fornecem orientações ao utilizar as APIs específicas da aplicação para Excel, OneNote, Visio e Word. Em resumo, deve:
- Carregue apenas as propriedades necessárias.
-
Minimizar o número de chamadas de sincronização(). Leia Evitar utilizar o método context.sync em ciclos para obter mais informações sobre como gerir
sync
chamadas no seu código. - Minimizar o número de objetos proxy criados. Também pode descontrolar objetos de proxy, conforme descrito na secção seguinte.
Controlar objetos de proxy desnecessários
Os objetos proxy persistem na memória até serem RequestContext.sync()
chamados. Grandes operações em lote podem gerar muitos objetos de proxy que são necessários apenas uma vez pelo suplemento e podem ser liberados da memória antes da execução do lote.
O untrack()
método liberta o objeto da memória. Este método é implementado em muitos objetos de proxy de API específicos da aplicação. Chamar untrack()
após o suplemento ser feito com o objeto deve gerar um benefício de desempenho notável ao utilizar um grande número de objetos proxy.
Observação
Range.untrack()
é um atalho para ClientRequestContext.trackedObjects.remove(thisRange). Qualquer objeto de proxy pode ser não-rastreado, removendo-o da lista de objetos rastreados no contexto.
O seguinte exemplo de código do Excel preenche um intervalo selecionado com dados, uma célula de cada vez. Depois que o valor é adicionado à célula, o intervalo que representa a célula é não-rastreado. Execute esse código em um intervalo selecionado de 20.000 de 10.000 células, primeiro, com a linha cell.untrack()
e, em seguida, sem ela. Você deve observar que o código é executado mais rapidamente com a linha cell.untrack()
do que sem ela. Você também poderá observar um tempo de resposta mais rápido posteriormente, porque a etapa de limpeza leva menos tempo.
Excel.run(async (context) => {
const largeRange = context.workbook.getSelectedRange();
largeRange.load(["rowCount", "columnCount"]);
await context.sync();
for (let i = 0; i < largeRange.rowCount; i++) {
for (let j = 0; j < largeRange.columnCount; j++) {
let cell = largeRange.getCell(i, j);
cell.values = [[i *j]];
// Call untrack() to release the range from memory.
cell.untrack();
}
}
await context.sync();
});
Tenha em atenção que a necessidade de descontrolar objetos só se torna importante quando lida com milhares deles. A maioria dos suplementos não precisa de gerir o controlo de objetos proxy.