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 in gran parte 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 quando possibile
GoogleAdsClient rappresenta la sessione di un utente durante le chiamate API. Fornisce
ottimizzazioni come:
- Memorizzazione nella cache dei canali gRPC utilizzati dai servizi API. In questo modo si riduce il tempo di configurazione durante le chiamate API iniziali.
- Riutilizzare i token di accesso, quando possibile. In questo modo si riduce il numero di round trip che la libreria client .NET di Google Ads deve eseguire per aggiornare i token di accesso.
Utilizza i token di accesso di un account a livello di amministratore, se possibile
Se disponi di un token di accesso emesso a livello di account amministratore, puoi utilizzarlo per
effettuare chiamate API su tutti gli account cliente Google Ads nella gerarchia dell'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
L'API Google Ads offre due modi principali per recuperare gli oggetti:
GoogleAdsService.Search (che utilizza la
paginazione) e
GoogleAdsService.SearchStream
(che utilizza lo streaming).
Mentre Search invia più richieste paginate per scaricare un intero report, 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,
SearchStream in genere offre un rendimento migliore rispetto alla paginazione. Consulta la guida ai report di streaming per scoprire di più su quando scegliere ciascun metodo.
Gestire manualmente gli aggiornamenti dei token di accesso
In determinati ambienti stateless come Google Cloud Functions, potrebbe non essere fattibile riutilizzare le istanze GoogleAdsClient tra le invocazioni.
Questi ambienti hanno le proprie best practice per rendere persistenti e riutilizzare i dati.
In Google.Ads.GoogleAds v27.0.0 e versioni successive, puoi inserire la tua istanza ICredential preconfigurata direttamente su GoogleAdsConfig utilizzando la proprietà Credentials e disattivare la memorizzazione nella cache del canale (UseChannelCache = false).
Se preferisci incapsulare la creazione delle credenziali in una classe di configurazione personalizzata (o se utilizzi una versione precedente della libreria), puoi estendere la classe
GoogleAdsConfig per eseguire i tuoi aggiornamenti dei token di accesso nel seguente modo:
// Create your own config class by extending the GoogleAdsConfig class.
class MyGoogleAdsConfig : GoogleAdsConfig
{
public MyGoogleAdsConfig() : base()
{
// Disable the library's built-in channel caching mechanism.
UseChannelCache = false;
}
protected override ICredential CreateCredentials()
{
// Create your own ICredential object here. You may refer to the
// default implementation of GoogleAdsConfig.CreateCredentials
// 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
Quando esegui il deployment sul server, assicurati di compilare l'app utilizzando la configurazione di rilascio. Quando utilizzi la configurazione di debug, la tua app viene compilata con informazioni di debug simboliche complete e senza ottimizzazioni del compilatore.
Profilare la tua app
Esegui la profilazione della tua app sia per l'utilizzo della CPU che della memoria utilizzata 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 migliora la reattività complessiva dell'app. La libreria .NET di Google Ads genera metodi asincroni per tutti i servizi e i metodi RPC.
Annullamento dei metodi asincroni
Puoi utilizzare il parametro callSettings per passare un
CancellationToken a metodi asincroni come
SearchStreamAsync:
using 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.V25.GoogleAdsService);
await googleAdsService.SearchStreamAsync(
request,
(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 durante lo sviluppo, 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 sul rendimento della tua app:
- Attiva solo i log di riepilogo.
- Imposta i log completi sul livello
ERROR. - Salva l'ID richiesta per le richieste specifiche non riuscite in modo da poterlo condividere con i canali di assistenza.
Per saperne di più, consulta la guida alla registrazione.
Utilizzare l'opzione ReadyToRun
.NET moderno supporta la precompilazione dei file binari per una piattaforma e un'architettura specifiche impostando PublishReadyToRun su true e pubblicando il file binario specificando un RuntimeIdentifier valido. Per saperne di più, consulta la guida all'implementazione di ReadyToRun.
Utilizzare TieredCompilation
TieredCompilation (attivato per impostazione predefinita nelle versioni moderne di .NET, come .NET 8)
consente a .NET di identificare gli hotspot e migliorare le prestazioni di runtime. La compilazione
a livelli funziona bene con ReadyToRun perché può utilizzare l'immagine
pregenerata per un avvio rapido e poi ricompilare i metodi hot con ottimizzazioni complete.
Per saperne di più, consulta la guida 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 hanno compromessi di rendimento diversi. Le app server dedicati che utilizzano la libreria .NET di Google Ads spesso hanno un rendimento migliore 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 fornire un throughput più elevato a un'app API Google Ads operando su più heap e thread GC. Per ulteriori dettagli, consulta la guida alla GC del server. Puoi attivare la garbage collection del server aggiungendo le seguenti righe al file
.csprojdella 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 durante l'elaborazione di report di grandi dimensioni. Puoi attivare la garbage collection simultanea aggiungendo le seguenti righe al file
.csprojdella tua app:<PropertyGroup> <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection> </PropertyGroup>Mantieni Garbage Collection VM:l'impostazione
RetainVMGarbageCollectionconfigura se i segmenti di memoria virtuale che devono essere eliminati 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 al file.csprojdell'app:<PropertyGroup> <RetainVMGarbageCollection>true</RetainVMGarbageCollection> </PropertyGroup>
Puoi perfezionare la GC scegliendo una configurazione che bilanci il comportamento della workstation e del server. Tutte le impostazioni GC pertinenti possono essere specificate nel file runtimeconfig.json dell'app .NET, tramite variabili di ambiente o in App.config.