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 con la tua app.
Questa guida illustra le ottimizzazioni del rendimento 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 quando effettua chiamate API. Offre 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 amministratore, se possibile
Se disponi di un token di accesso emesso a livello di account amministratore, puoi utilizzarlo per effettuare chiamate API per tutti gli account cliente Google Ads nella gerarchia di account.
Se combinata con il riutilizzo delle istanze GoogleAdsClient, questa operazione 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
l'impaginazione) e
GoogleAdsService.SearchStream
(che utilizza lo streaming).
Mentre Search invia più richieste impaginate per scaricare un intero report, SearchStream invia una singola richiesta e avvia una connessione permanente 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 prestazioni migliori rispetto alla paginazione. Consulta la guida ai report in streaming per scoprire di più su quando scegliere ciascun metodo.
Gestisci manualmente gli aggiornamenti dei token di accesso
In alcuni ambienti stateless, come Google Cloud Functions, potrebbe non essere possibile riutilizzare le istanze GoogleAdsClient tra le chiamate.
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 come segue:
// 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
Assicurati di compilare l'app utilizzando la configurazione di rilascio durante il deployment sul server. Quando utilizzi la configurazione Debug, la tua app viene compilata con informazioni di debug simboliche complete e senza ottimizzazioni del compilatore.
Profila la tua app
Profila l'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.
Utilizza 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.V26.GoogleAdsService);
await googleAdsService.SearchStreamAsync(
request,
(SearchGoogleAdsStreamResponse resp) =>
{
foreach (GoogleAdsRow googleAdsRow in resp.Results)
{
// Process the row.
}
},
callSettings);
Disattiva il logging quando puoi
La libreria .NET di Google Ads disattiva il logging per impostazione predefinita e utilizza un approccio di logging lazy che offre prestazioni migliori alla tua app. Se attivi il logging durante lo sviluppo, assicurati di disattivarlo nell'ambiente di produzione. Se devi monitorare richieste specifiche con errori in produzione, puoi eseguire uno o più dei seguenti passaggi senza influire negativamente sulle prestazioni dell'app:
- Attiva solo i log di riepilogo.
- Imposta i log completi sul livello
ERROR. - Salva l'ID richiesta per richieste specifiche non riuscite in modo da poterlo condividere con i canali di assistenza.
Per scoprire di più, consulta la guida al logging.
Utilizza l'opzione ReadyToRun
Il .NET moderno supporta la precompilazione dei binari per una piattaforma e un'architettura specifiche impostando PublishReadyToRun su true e pubblicando il binario specificando un RuntimeIdentifier valido. Per saperne di più, consulta la guida al deployment di ReadyToRun.
Usa TieredCompilation
TieredCompilation (abilitata 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 di TieredCompilation.
Ottimizza 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 per server dedicate che utilizzano la libreria .NET di Google Ads spesso hanno un rendimento migliore quando vengono eseguite in un profilo server.
Puoi trarre vantaggio dall'ottimizzazione delle seguenti impostazioni di GC:
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 maggiori dettagli, consulta la guida alla GC del server. Puoi attivare la garbage collection del server aggiungendo le seguenti righe al file
.csprojdell'app:<PropertyGroup> <ServerGarbageCollection>true</ServerGarbageCollection> </PropertyGroup>Garbage collection simultanea: puoi attivare la garbage collection simultanea per assegnare al GC .NET 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
.csprojdell'app:<PropertyGroup> <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection> </PropertyGroup>Conserva la garbage collection delle 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 ottimizzare il 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 nel file App.config.