A biblioteca de cliente do .NET para Google Ads simplifica as interações do seu app com a API Google Ads, com a configuração mínima necessária. 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 para apps .NET e complementa as práticas recomendadas que são geralmente 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. 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 ida e volta que a biblioteca de cliente .NET do Google Ads precisa realizar 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 em uma conta de administrador, poderá usá-lo
para fazer chamadas de API em todas as contas de cliente do Google Ads na hierarquia
da 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 o SearchStream em vez da Pesquisa sempre que possível
Embora GoogleAdsService.Search
possa
enviar várias solicitações paginadas para fazer o download do relatório inteiro,
GoogleAdsService.SearchStream
envia uma única solicitação e inicia uma conexão persistente com a API Google Ads,
independentemente do tamanho do relatório. Ao eliminar o tempo de ida e volta da rede
necessário para solicitar cada página individual de uma resposta Search
, dependendo do
seu app, o SearchStream
pode oferecer um desempenho melhor em relação à paginação. Consulte
Pesquisa versus
SearchStream para saber
mais sobre essa otimização.
Gerenciar manualmente as atualizações do token de acesso
Em alguns ambientes, como o Google Cloud Functions, pode não ser viável reutilizar instâncias do GoogleAdsClient
. Esses ambientes podem ter práticas recomendadas
próprias para manter e reutilizar dados. Nesses casos, é possível estender a
classe GoogleAdsConfig
para realizar suas próprias renovaçõ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 o 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, o app é compilado com informações completas de depuração simbólica e sem otimização.
Gerar um perfil do seu app
Crie um perfil do app para uso de CPU e memória para identificar gargalos de desempenho. O Visual Studio oferece ferramentas de diagnóstico para ajudar a criar o perfil do app. Também há outras ferramentas de criação de perfil comercial disponíveis.
Usar métodos assíncronos
A programação assíncrona usando o paradigma de espera assíncrona ajuda a evitar gargalos de desempenho e melhorar 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
É possível usar o parâmetro callSettings
para transmitir um
CancellationToken
a 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.V19.GoogleAdsService);
googleAdsService.SearchStream(request,
delegate (SearchGoogleAdsStreamResponse resp)
{
foreach (GoogleAdsRow googleAdsRow in resp.Results)
{
// Process the row.
}
}, callSettings
);
Desative a geração de registros quando possível
A biblioteca .NET do Google Ads desativa o registro por padrão e usa uma abordagem de registro lento, que oferece melhor desempenho ao app. Se você ativar o registro, desative-o no ambiente de produção. Se você precisar monitorar solicitações com falhas específicas na produção, siga uma ou mais das seguintes etapas sem afetar negativamente o desempenho do app:
- Ative apenas os registros de resumo.
- Defina os registros completos no nível
ERROR
. - Salve o ID de solicitações específicas que você pode compartilhar com os canais de suporte.
Consulte o guia de registro 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.
O SearchStream
oferece melhor desempenho em relação ao Search
, mas há
situações em que o Search
é a melhor opção.
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ífica especificando uma configuração PublishReadyToRun
como true
e,
em seguida, publicando o binário especificando um RuntimeIdentifier
válido na
publicação. Consulte o guia sobre o recurso
ReadyToRun
para saber
mais.
Usar a 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 fornece dois perfis gerais para a coleta de lixo (GC): um perfil de estação de trabalho e um perfil de servidor. Esses dois perfis têm trade-offs de performance diferentes. Os apps que usam a biblioteca .NET do Google Ads tendem a ter um desempenho melhor quando executados em um perfil de servidor. Você pode ajustar as seguintes configurações do GC.
Coleta de lixo do servidor:a 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. É possível ativar a coleta de lixo do servidor adicionando 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 fornecer ao GC do .NET uma linha de execução dedicada para a coleta de lixo na geração 2. Essa configuração pode ser útil ao processar relatórios com tamanhos grandes. É possível ativar a coleta de lixo simultânea adicionando as linhas a seguir 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 seguintes linhas ao app.<PropertyGroup> <RetainVMGarbageCollection>true</RetainVMGarbageCollection> </PropertyGroup>
É possível ajustar seu 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 app .NET Core, em uma variável
de ambiente ou no App.config
do app do SDK do .NET.