A biblioteca de cliente .NET do Google Ads simplifica as interações do seu app com a API Google Ads, com configuração mínima da sua parte. No entanto, o desempenho geral depende muito de como a biblioteca é usada e integrada ao seu app.
Este guia aborda otimizações de performance específicas para apps .NET e complementa as práticas recomendadas que geralmente se aplicam à API Google Ads.
Reutilize o GoogleAdsClient sempre que possível
GoogleAdsClient
representa a sessão de um usuário ao fazer chamadas de API. Ele oferece otimizações como:
- Armazenar em cache os canais gRPC usados pelos serviços de API. Isso reduz o tempo de configuração ao fazer chamadas iniciais de API.
- Reutilizar tokens de acesso sempre que possível. Isso reduz o número de viagens de ida e volta que a biblioteca de cliente .NET do Google Ads precisa fazer para atualizar os tokens de acesso.
Use tokens de acesso de uma conta de administrador sempre que possível
- Se você tiver um token de acesso emitido no nível de uma conta de administrador, poderá usá-lo
para fazer chamadas de API em todas as contas de cliente do Google Ads na hierarquia
dessa conta. Quando combinado com a reutilização de instâncias
GoogleAdsClient
, isso pode reduzir ainda mais o número de viagens de ida e volta que a biblioteca de cliente precisa realizar para atualizar os tokens de acesso.
Use SearchStream em vez de Search sempre que possível
Embora o GoogleAdsService.Search
possa
enviar várias solicitações paginadas para baixar o relatório inteiro, o
GoogleAdsService.SearchStream
envia uma única solicitação e inicia uma conexão persistente com a API Google Ads
independente do tamanho do relatório. Ao eliminar o tempo de rede de ida e volta
necessário para solicitar cada página individual de uma resposta Search
, dependendo do
seu app, SearchStream
pode oferecer melhor desempenho do que a paginação. Consulte Pesquisa x
SearchStream para saber
mais sobre essa otimização.
Gerenciar manualmente as atualizações de token de acesso
Em determinados ambientes, como o Google Cloud Functions, talvez não seja possível reutilizar instâncias GoogleAdsClient
. Esses ambientes podem ter práticas recomendadas próprias para persistir e reutilizar dados. Nesses casos, é possível estender a classe
GoogleAdsConfig
para realizar suas próprias atualizações de token de acesso da seguinte maneira.
// 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 o app usando a configuração de lançamento ao implantar no servidor. Ao usar a configuração de depuração, seu app é compilado com informações de depuração simbólica completas e sem otimização.
Gerar um perfil do seu app
Crie um perfil do app para uso de CPU e memória e identifique gargalos de desempenho. O Visual Studio oferece ferramentas de diagnóstico para ajudar a criar o perfil do seu app. Também há outras ferramentas comerciais de criação de perfil disponíveis.
Usar métodos assíncronos
A programação assíncrona usando o paradigma async-await ajuda a evitar gargalos de desempenho e melhora a capacidade de resposta geral do app. A biblioteca .NET do Google Ads gera métodos assíncronos para todos os serviços e métodos RPC.
Cancelamento de métodos assíncronos
Use o parâmetro callSettings
para transmitir um
CancellationToken
para métodos assíncronos:
CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
cancellationTokenSource.CancelAfter(3000);
CallSettings callSettings = CallSettings.FromCancellationToken(cancellationTokenSource.Token);
string query = "SELECT campaign.name FROM campaign";
var request = new SearchGoogleAdsStreamRequest()
{
CustomerId = customerId.ToString(),
Query = query,
};
GoogleAdsServiceClient googleAdsService = client.GetService(
Services.V20.GoogleAdsService);
googleAdsService.SearchStream(request,
delegate (SearchGoogleAdsStreamResponse resp)
{
foreach (GoogleAdsRow googleAdsRow in resp.Results)
{
// Process the row.
}
}, callSettings
);
Desative a geração de registros quando puder
A biblioteca .NET do Google Ads desativa o registro em log por padrão e usa uma abordagem de registro em log lenta, o que melhora a performance do app. Se você ativar o registro em log, desative-o no ambiente de produção. Se você precisar monitorar solicitações com falha específicas na produção, siga uma ou mais das etapas abaixo sem afetar negativamente o desempenho do app:
- Ative apenas os registros de resumo.
- Defina os registros completos como 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.
Decidir se você quer usar o método SearchStream ou Search
A API Google Ads oferece duas maneiras principais de recuperar objetos: o método Search
(que usa paginação) e SearchStream
(que usa streaming).
SearchStream
oferece melhor desempenho 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 para pré-compilar seus binários em uma plataforma
e arquitetura específicas ao especificar uma configuração PublishReadyToRun
como true
e
publicar o binário especificando um RuntimeIdentifier
válido ao
publicar. Consulte o guia sobre o recurso ReadyToRun
para saber mais.
Usar TieredCompilation
O 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 a coleta de lixo (GC)
O .NET oferece dois perfis gerais para coleta de lixo (GC, na sigla em inglês): um perfil de estação de trabalho e um perfil de servidor. Esses dois perfis têm compromissos de desempenho diferentes. Os apps que usam a biblioteca .NET do Google Ads costumam ter uma performance melhor quando executados em um perfil de servidor. É possível se beneficiar do ajuste das seguintes configurações de GC.
Coleta de lixo do servidor:permite que o tempo de execução do .NET ofereça melhor desempenho a um app da API Google Ads ao operar em várias linhas de execução. Consulte este guia para mais detalhes. Para ativar a coleta de lixo do servidor, adicione as seguintes linhas ao arquivo
.csproj
do app.<PropertyGroup> <ServerGarbageCollection>true</ServerGarbageCollection> </PropertyGroup>
Coleta de lixo simultânea:é possível ativar a coleta de lixo simultânea para dar ao GC do .NET uma linha de execução dedicada para coleta de lixo na geração 2. Essa configuração pode ser útil ao processar relatórios grandes. Você pode ativar a coleta de lixo simultânea adicionando as seguintes linhas ao arquivo
.csproj
do app.<PropertyGroup> <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection> </PropertyGroup>
Manter a coleta de lixo da VM:a configuração
RetainVMGarbageCollection
define se os segmentos de memória virtual que precisam ser excluídos são colocados em uma lista de espera para uso futuro ou são liberados de volta para o sistema operacional (SO). Para ativar a retenção de memória virtual, adicione as linhas a seguir ao app.<PropertyGroup> <RetainVMGarbageCollection>true</RetainVMGarbageCollection> </PropertyGroup>
É possível ajustar o GC com uma configuração que fique entre uma estação de trabalho e um servidor. Todas as configurações relevantes são especificadas no arquivo runtimeconfig.json
do app .NET Core, em uma variável de ambiente ou no App.config
do app .NET SDK.