La libreria client .NET di Google Ads semplifica le interazioni della tua app con l'API Google Ads, con una configurazione minima da parte tua. Tuttavia, le prestazioni complessive dipendono molto da come la libreria viene utilizzata e integrata nella tua app.
Questa guida illustra le ottimizzazioni delle prestazioni specifiche per le app .NET e integra le best practice generalmente applicabili all'API Google Ads.
Riutilizza GoogleAdsClient ogni volta che è possibile
GoogleAdsClient
rappresenta la sessione di un utente quando effettua chiamate API. Fornisce
ottimizzazioni come:
- Memorizzazione nella cache dei canali gRPC utilizzati dai servizi API. In questo modo, il tempo di configurazione per effettuare le chiamate API iniziali viene ridotto.
- Riutilizzare i token di accesso, quando possibile. In questo modo si riduce il numero di round trip che la libreria client Google Ads .NET deve eseguire per aggiornare i token di accesso.
Utilizza i token di accesso di un account a livello di amministratore, se possibile
- Se hai un token di accesso emesso a livello di account amministratore, puoi utilizzarlo
per effettuare chiamate API su tutti gli account cliente Google Ads nell'ambito di quella gerarchia
di account. Se combinato con il riutilizzo delle istanze
GoogleAdsClient
, questo può ridurre ulteriormente il numero di round trip che la libreria client deve eseguire per aggiornare i token di accesso.
Utilizza SearchStream anziché Search quando possibile
GoogleAdsService.Search
può
inviare più richieste paginate per scaricare l'intero report,
GoogleAdsService.SearchStream
invia una singola richiesta e avvia una connessione persistente con l'API Google Ads
indipendentemente dalle dimensioni del report. Eliminando il tempo di andata e ritorno della rete
necessario per richiedere ogni singola pagina di una risposta Search
, a seconda
della tua app, SearchStream
potrebbe offrire prestazioni migliori rispetto alla paginazione. Consulta
Ricerca e
SearchStream per scoprire
di più su questa ottimizzazione.
Gestire manualmente gli aggiornamenti dei token di accesso
In determinati ambienti, come Google Cloud
Functions, potrebbe non essere fattibile riutilizzare
le istanze GoogleAdsClient
. Questi ambienti possono avere le proprie best practice per archiviare e riutilizzare i dati. In questi casi, puoi estendere la classe GoogleAdsConfig
per eseguire i tuoi aggiornamenti del token di accesso come segue.
// 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);
Compila per la build di release
Assicurati di compilare l'app utilizzando la configurazione di rilascio quando esegui il deployment sul server. Quando utilizzi la configurazione di debug, la tua app viene compilata con informazioni di debug simboliche complete e senza ottimizzazione.
Profilare l'app
Esegui la profilazione della tua app sia per l'utilizzo della CPU sia per quello della memoria per identificare i colli di bottiglia delle prestazioni. Visual Studio fornisce strumenti di diagnostica per aiutarti a profilare la tua app. Sono disponibili anche altri strumenti di profilazione commerciali.
Utilizzare metodi asincroni
La programmazione asincrona che utilizza il paradigma async-await consente di evitare colli di bottiglia delle prestazioni e migliorare la reattività complessiva dell'app. La libreria Google Ads .NET genera metodi asincroni per tutti i servizi e i metodi RPC.
Annullamento dei metodi asincroni
Puoi utilizzare il parametro callSettings
per passare un
CancellationToken
ai metodi asincroni:
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.V21.GoogleAdsService);
googleAdsService.SearchStream(request,
delegate (SearchGoogleAdsStreamResponse resp)
{
foreach (GoogleAdsRow googleAdsRow in resp.Results)
{
// Process the row.
}
}, callSettings
);
Disattivare la registrazione quando possibile
La libreria .NET di Google Ads disattiva la registrazione per impostazione predefinita e utilizza un approccio di registrazione lazy che offre alla tua app un rendimento migliore. Se attivi la registrazione, assicurati di disattivarla nell'ambiente di produzione. Se devi monitorare richieste specifiche non riuscite in produzione, puoi eseguire uno o più dei seguenti passaggi senza influire negativamente sulle prestazioni della tua app:
- Attiva solo i log di riepilogo.
- Imposta i log completi sul livello
ERROR
. - Salva l'ID richiesta per le richieste specifiche di tuo interesse che puoi condividere con i canali di assistenza.
Per saperne di più, consulta la guida alla registrazione.
Decidere se utilizzare il metodo SearchStream o Search
L'API Google Ads offre due modi principali per recuperare gli oggetti: il metodo Search
(che utilizza la paginazione) e SearchStream
(che utilizza lo streaming).
SearchStream
offre prestazioni migliori rispetto a Search
, ma ci sono
scenari in cui è preferibile Search
.
Per saperne di più sui due metodi, consulta la guida ai report di streaming.
Utilizzare l'opzione ReadyToRun
.NET Core 3.1 aggiunge il supporto per la precompilazione dei file binari in una piattaforma e un'architettura specifiche specificando l'impostazione PublishReadyToRun
su true
e pubblicando il file binario specificando un RuntimeIdentifier
valido durante la pubblicazione. Consulta la guida alla funzionalità ReadyToRun
per scoprire di più.
Utilizzare TieredCompilation
TieredCompilation
consente a .NET di identificare i punti critici e migliorare le proprie
prestazioni. La compilazione a più livelli funziona meglio con l'opzione ReadyToRun
, poiché
può utilizzare l'immagine pregenerata quando è disponibile. Per saperne di più, consulta la guida su
TieredCompilation
.
Perfeziona la garbage collection (GC)
.NET fornisce due profili generali per la garbage collection (GC): un profilo workstation e un profilo server. Questi due profili presentano compromessi di rendimento diversi. Le app che utilizzano la libreria .NET di Google Ads tendono a funzionare meglio se eseguite in un profilo server. Puoi trarre vantaggio dalla messa a punto delle seguenti impostazioni di Garbage Collection.
Garbage collection del server:la garbage collection del server consente al runtime .NET di offrire prestazioni migliori a un'app API Google Ads operando su più thread. Per ulteriori dettagli, consulta questa guida. Puoi attivare la garbage collection del server aggiungendo le seguenti righe al file
.csproj
della tua app.<PropertyGroup> <ServerGarbageCollection>true</ServerGarbageCollection> </PropertyGroup>
Garbage collection simultanea:puoi attivare la garbage collection simultanea per assegnare a .NET GC un thread dedicato per la garbage collection nella generazione 2. Questa impostazione può essere utile quando si elaborano report di grandi dimensioni. Puoi attivare la garbage collection simultanea aggiungendo le seguenti righe al file
.csproj
della tua app.<PropertyGroup> <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection> </PropertyGroup>
Retain VM garbage collection (Mantieni garbage collection VM): l'impostazione
RetainVMGarbageCollection
configura se i segmenti di memoria virtuale da eliminare vengono inseriti in un elenco di standby per un utilizzo futuro o vengono rilasciati al sistema operativo (OS). Puoi attivare la conservazione della memoria virtuale aggiungendo le seguenti righe alla tua app.<PropertyGroup> <RetainVMGarbageCollection>true</RetainVMGarbageCollection> </PropertyGroup>
Puoi perfezionare la GC scegliendo una configurazione intermedia tra una workstation e un server. Tutte le impostazioni pertinenti
sono specificate nel file runtimeconfig.json
dell'app .NET Core, in una variabile
di ambiente o nel file App.config
dell'app .NET SDK.