Desempenho dos aplicativos

A biblioteca cliente .NET do Google Ads simplifica as interações do seu aplicativo com a Google Ads API com o mínimo de configuração. No entanto, o desempenho geral depende muito de como a biblioteca é usada e integrada ao app.

Este guia aborda otimizações de desempenho específicas de aplicativos .NET e complementa as práticas recomendadas que geralmente são aplicáveis à API Google Ads.

Reutilize o GoogleAdsClient sempre que possível

GoogleAdsClient representa a sessão de um usuário ao fazer chamadas de API. Ela fornece otimizações como:

  • Armazenar em cache os canais gRPC usados pelos serviços da API. Isso reduz o tempo de configuração durante as chamadas iniciais de API.
  • Reutilizar tokens de acesso quando possível Isso reduz o número de idas e voltas que a biblioteca cliente do Google Ads .NET precisa realizar para atualizar os tokens de acesso.

Use tokens de acesso de uma conta de administrador quando possível

  • Se você tiver um token de acesso emitido no nível da conta de administrador, poderá usá-lo para fazer chamadas de API em todas as contas de clientes do Google Ads nessa hierarquia. Quando combinado com a reutilização de instâncias de GoogleAdsClient, pode reduzir ainda mais o número de idas e voltas que a biblioteca de cliente precisa realizar para atualizar os tokens de acesso.

Use SearchStream em vez de pesquisa sempre que possível

Embora a GoogleAdsService.Search possa enviar várias solicitações paginadas para fazer o download do relatório inteiro, a GoogleAdsService.SearchStream envia uma única solicitação e inicia uma conexão permanente com a API Google Ads, independentemente do tamanho do relatório. Ao eliminar o tempo de ida e volta necessário para solicitar cada página de uma resposta Search, dependendo do seu app, o SearchStream pode oferecer melhor desempenho em relação à paginação. Consulte Pesquisa x SearchStream para saber mais sobre essa otimização.

Gerenciar manualmente as atualizações do token de acesso

Em determinados ambientes, como o Google Cloud Functions, pode não ser viável reutilizar instâncias de GoogleAdsClient. Esses ambientes podem ter as próprias práticas recomendadas para persistir e reutilizar dados. Nesses casos, você pode estender a classe GoogleAdsConfig para executar suas próprias atualizações de token de acesso, conforme mostrado a seguir.

// Create your own config class by extending the GoogleAdsConfig class.

class MyGoogleAdsConfig : GoogleAdsConfig
{
    public MyGoogleAdsConfig() : base()
    {
        // Disable the library's in-built channel caching mechanism.
        this.UseChannelCache = false;
    }
    protected override ICredential CreateCredentials()
    {
        // TODO: Create your own ICredentials object here. You may refer to the
        // default implementation of GoogleAdsConfig::CreateCreateCredentials
        // for an example.
    }
}

// Use your own config class when initializing the GoogleAdsClient instance.

MyGoogleAdsConfig myconfig = new MyGoogleAdsConfig();
GoogleAdsClient client = new GoogleAdsClient(myconfig);

Compilar para build de lançamento

Compile seu app usando a Configuração de versão ao implantar no servidor. Ao usar a configuração de depuração, o app é compilado com informações de depuração simbólicas completas e sem otimização.

Gerar um perfil do seu app

Crie um perfil do app para uso de CPU e memória a fim de identificar gargalos de desempenho. O Visual Studio fornece ferramentas de diagnóstico para ajudar a criar o perfil do app. Há também outras ferramentas de criação de perfil comerciais disponíveis.

Usar métodos assíncronos

A programação assíncrona com o paradigma async-await ajuda a evitar gargalos de desempenho e melhorar a capacidade de resposta geral do seu app. A biblioteca .NET do Google Ads gera métodos assíncronos para todos os serviços e métodos RPC.

Desative a geração de registros quando possível

A biblioteca .NET do Google Ads desativa a geração de registros por padrão e usa uma abordagem de geração de registros lenta, que melhora o desempenho do app. Se você ativar a geração de registros, desative-a no ambiente de produção. Se você precisar monitorar solicitações específicas com falha na produção, poderá seguir uma ou mais das seguintes etapas sem afetar negativamente o desempenho do app:

  • Ative apenas os registros de resumo.
  • Defina os registros completos para o nível ERROR.
  • Salve o ID das solicitações específicas de interesse que você pode compartilhar com os canais de suporte.

Consulte o guia de geração de registros para saber mais.

Decida se quer usar o método SearchStream ou Search

A API Google Ads fornece duas maneiras principais de recuperar objetos: o método Search, que usa paginação, e SearchStream, que usa streaming.

SearchStream fornece um desempenho melhor do que Search, mas há cenários em que Search é preferível.

Consulte o guia de relatórios de streaming para saber mais sobre os dois métodos.

Usar a opção ReadyToRun

O .NET Core 3.1 adiciona suporte à pré-compilação de binários em uma plataforma e arquitetura específicas especificando uma configuração PublishReadyToRun como true e publicando o binário especificando um RuntimeIdentifier válido ao publicar. Consulte o guia sobre o recurso ReadyToRun para saber mais.

Usar TieredCompilation

TieredCompilation permite que o .NET identifique pontos de acesso e melhore o desempenho. A compilação em camadas funciona melhor com a opção ReadyToRun, já que ela pode usar a imagem pré-gerada quando disponível. Consulte o guia sobre TieredCompilation para saber mais.

Ajustar sua coleta de lixo (GC)

O .NET fornece dois perfis gerais para coleta de lixo (GC, na sigla em inglês): um perfil de estação de trabalho e um de servidor. Esses dois perfis têm desvantagens de desempenho diferentes. Os aplicativos que usam a biblioteca .NET do Google Ads tendem a ter um desempenho melhor quando executados em um perfil de servidor. Você pode se beneficiar do ajuste das seguintes configurações de GC.

  • Coleta de lixo do servidor:a coleta de lixo do servidor permite que o ambiente de execução do .NET ofereça melhor desempenho a um app da Google Ads API operando em várias linhas. Consulte este guia para mais detalhes. Ative a coleta de lixo do servidor adicionando as seguintes linhas ao arquivo .csproj do seu app.

    <PropertyGroup>
      <ServerGarbageCollection>true</ServerGarbageCollection>
    </PropertyGroup>
    
  • Coleta de lixo simultânea:é possível ativar a coleta de lixo simultânea para dar à GC do .NET uma linha de execução dedicada à coleta de lixo na segunda geração. Essa configuração pode ser útil ao processar relatórios com tamanhos grandes. É possível ativar a coleta de lixo simultânea adicionando as seguintes linhas ao arquivo .csproj do app.

    <PropertyGroup>
      <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection>
    </PropertyGroup>
    
  • Reter a coleta de lixo da VM: a configuração RetainVMGarbageCollection define se os segmentos da memória virtual que precisam ser excluídos serão colocados em uma lista de espera para uso futuro ou liberados para o sistema operacional (SO). Ative a retenção de memória virtual adicionando as seguintes linhas ao seu app.

    <PropertyGroup>
      <RetainVMGarbageCollection>true</RetainVMGarbageCollection>
    </PropertyGroup>
    

Você pode ajustar sua GC definindo uma configuração entre uma estação de trabalho e um servidor. Todas as configurações relevantes são especificadas no arquivo runtimeconfig.json do seu app .NET Core, em uma variável de ambiente ou no App.config do app do SDK .NET.