A biblioteca cliente .NET do Google Ads simplifica as interações do seu aplicativo com a API Google Ads com o mínimo de configurações da sua parte. No entanto, o valor geral desempenho depende muito de como a biblioteca é usada e integrada app.
Este guia aborda otimizações de desempenho específicas para aplicativos .NET e complementa o melhor práticas que se aplicam de modo geral aos API Google Ads.
Reutilizar o GoogleAdsClient sempre que possível
GoogleAdsClient
representa a sessão de um usuário ao fazer chamadas de API. Oferece
como:
- armazenar os canais gRPC em cache; usados pelos serviços da API. Isso reduz o tempo de configuração ao criar APIs iniciais chamadas.
- Reutilizar tokens de acesso quando possível. Isso reduz o número de viagens de ida e volta que a biblioteca cliente .NET do Google Ads deve executar para atualizar os tokens de acesso.
Usar tokens de acesso de uma conta de nível de administrador quando possível
- Você pode usar um token de acesso emitido no nível da conta de administrador.
para fazer chamadas de API em todas as contas de clientes do Google Ads dessa conta
hierarquia. Quando combinado com a reutilização de instâncias de
GoogleAdsClient
, isso pode reduzir ainda mais o número de viagens de ida e volta que a biblioteca cliente precisa realizar para atualizar tokens de acesso.
Use o SearchStream em vez da Pesquisa sempre que possível.
Embora o 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 permanente com a API Google Ads
seja qual for o tamanho do relatório. Eliminando o tempo de ida e volta da rede
necessários para solicitar cada página individual de uma resposta Search
, dependendo da
seu app, o SearchStream
pode oferecer um desempenho melhor do que a paginação. Consulte
Pesquisa x
SearchStream para aprender
mais sobre essa otimização.
Gerenciar manualmente as atualizações de tokens de acesso
Em determinados ambientes, como o Google Cloud
, talvez não seja viável reutilizá-las
GoogleAdsClient
instâncias. Esses ambientes podem vir com seus próprios
práticas de retenção e reutilização de dados. Nesses casos, você pode estender o
GoogleAdsConfig
para executar 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 o build de lançamento
Compile seu app usando a versão configuração durante a implantação no servidor. Ao usar a configuração de depuração, seu app é compilado com informações de depuração simbólicas completas e sem otimização.
Gerar um perfil do seu app
Criar perfil do app para uso de CPU e memória a fim de identificar o desempenho e gargalos. O Visual Studio oferece Ferramentas de diagnóstico para ajudar a criar perfis para seu app. Há também outras características comerciais ferramentas que estão disponíveis.
Usar métodos assíncronos
Programação assíncrona usando a função async-await paradigma ajuda a evitar gargalos de desempenho e melhorar a capacidade de resposta geral seu app. A biblioteca .NET do Google Ads gera métodos assíncronos para todos os serviços e RPC.
Cancelamento de métodos assíncronos
É possível usar o parâmetro callSettings
para transmitir uma
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.V17.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 a geração de registros por padrão e usa um registro lento que melhora o desempenho do app. Se você ativar a geração de registros, lembre-se de desativá-la no ambiente de produção. Se você precisar monitorar para solicitações específicas com falha na produção, é possível executar uma ou mais das etapas a seguir sem prejudicar o desempenho do app:
- Ative apenas os registros de resumo.
- Defina os registros completos para o nível
ERROR
. - Salvar o ID de 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
tem 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 dos seus binários para uma plataforma específica.
do Terraform ao especificar uma configuração de PublishReadyToRun
para true
.
publicar o binário especificando um RuntimeIdentifier
válido quando
publicação. Consulte o guia na ReadyToRun
recurso para saber mais
mais.
Usar TieredCompilation
O TieredCompilation
permite que o .NET identifique pontos de acesso e melhore os
desempenho. A compilação em níveis funciona melhor com a opção ReadyToRun
, já que
ele pode usar a imagem pré-gerada quando disponível. Veja o guia sobre
TieredCompilation
para saber mais.
Ajustar sua coleta de lixo (GC)
O .NET fornece dois perfis gerais para coleta de lixo (GC): uma estação de trabalho e um perfil de servidor. Esses dois perfis têm desempenhos diferentes compensações. Os aplicativos que usam a biblioteca .NET do Google Ads tendem a apresentar melhor desempenho quando executados em um perfil de servidor. Você pode se beneficiar do ajuste das configurações do GC a seguir.
Coleta de lixo do servidor:a coleta de lixo do servidor permite o uso de .NET. de execução para melhorar o desempenho de um app da API Google Ads, operando em várias linhas de execução. Confira este guia para mais detalhes. É possível ativar a coleta de lixo do servidor adicionando o linhas a seguir 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 coleta de lixo para dar ao .NET GC um thread dedicado para a coleta de lixo da segunda geração. Essa configuração pode ser útil ao processar relatórios com tamanhos grandes. Você pode ative a coleta de lixo simultânea adicionando as seguintes linhas ao seu arquivo
.csproj
do app.<PropertyGroup> <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection> </PropertyGroup>
Reter a coleta de lixo da VM:o
RetainVMGarbageCollection
Configuração configura se os segmentos da memória virtual que devem ser excluídos são colocados em uma lista de espera para uso futuro ou são liberados para o sistema do Google (SO). É possível ativar a retenção de memória virtual adicionando o linhas ao seu aplicativo.<PropertyGroup> <RetainVMGarbageCollection>true</RetainVMGarbageCollection> </PropertyGroup>
Você pode ajustar sua GC com uma configuração que esteja entre
uma estação de trabalho e um servidor. Todos os pontos relevantes
configurações
especificados no arquivo runtimeconfig.json
do aplicativo .NET Core, um ambiente
ou a App.config
do app do SDK do .NET.