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 con la tua app.
Questa guida illustra le ottimizzazioni delle prestazioni specifiche per le app .NET e completa le best practice applicabili in generale all'API Google Ads.
Riutilizza GoogleAdsClient se possibile
GoogleAdsClient
rappresenta la sessione di un utente quando vengono effettuate chiamate all'API. Offre ottimizzazioni come:
- Memorizzazione nella cache dei canali gRPC utilizzati dai servizi API. In questo modo, il tempo di configurazione viene ridotto quando vengono effettuate le chiamate API iniziali.
- Riutilizzare i token di accesso, se possibile. In questo modo si riduce il numero di viaggi di andata e ritorno che la libreria client .NET di Google Ads deve eseguire per aggiornare i token di accesso.
Se possibile, utilizza i token di accesso da un account a livello di amministratore
- Se disponi di un token di accesso emesso a livello di account amministratore, puoi utilizzarlo per effettuare chiamate API a 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 viaggi di andata e ritorno che la libreria client deve eseguire per aggiornare i token di accesso.
Se possibile, utilizza SearchStream anziché la Ricerca
Sebbene GoogleAdsService.Search
possa
inviare più richieste paginate per scaricare l'intero report,
GoogleAdsService.SearchStream
invia una singola richiesta e avvia una connessione permanente con l'API Google Ads
indipendentemente dalle dimensioni del report. Eliminando il tempo di rete di andata e ritorno necessario per richiedere ogni singola pagina di una risposta Search
, a seconda della tua app, SearchStream
potrebbe offrire un rendimento migliore rispetto alla paginazione. Consulta
Ricerca e SearchStream per scoprire di più su questa ottimizzazione.
Gestire manualmente gli aggiornamenti dei token di accesso
In alcuni ambienti, come Google Cloud Functions, potrebbe non essere possibile riutilizzare le istanze GoogleAdsClient
. Questi ambienti possono avere le proprie best practice per la persistenza e il riutilizzo dei dati. In questi casi, 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 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 release quando esegui il deployment sul server. Quando utilizzi la configurazione di debug, l'app viene compilata con informazioni di debug simboliche complete e senza ottimizzazione.
Profila la tua app
Esegui il profiling dell'app per l'utilizzo della CPU e della memoria per identificare i colli di bottiglia delle prestazioni. Visual Studio fornisce strumenti di diagnostica per aiutarti a creare il profilo della tua app. Sono disponibili anche altri strumenti di profiling commerciale.
Utilizzare metodi asincroni
La programmazione asincrona che utilizza il paradigma async-await consente di evitare colli di bottiglia nel rendimento e di migliorare la reattività complessiva della tua 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
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.V19.GoogleAdsService);
googleAdsService.SearchStream(request,
delegate (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 alla tua app un rendimento migliore. Se attivi la registrazione, assicurati di disattivarla nell'ambiente di produzione. Se devi monitorare richieste con errori specifici 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 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 fornisce due modi principali per recuperare gli oggetti: il metodo Search
(che utilizza la paginazione) e SearchStream
(che utilizza lo streaming).
SearchStream
offre un rendimento migliore rispetto a Search
, ma esistono scenari in cui è preferibile Search
.
Per saperne di più su questi due metodi, consulta la guida ai report sul live streaming.
Utilizzare l'opzione ReadyToRun
.NET Core 3.1 aggiunge il supporto per la precompilazione dei binari per una piattaforma e un'architettura specifiche specificando un'impostazione PublishReadyToRun
su true
e poi pubblicando il binario specificando un RuntimeIdentifier
valido al momento della pubblicazione. Per saperne di più, consulta la guida alla funzionalità ReadyToRun
.
Utilizzare TieredCompilation
TieredCompilation
consente a .NET di identificare gli hotspot e migliorare le sue prestazioni. La compilazione a più livelli funziona meglio con l'opzione ReadyToRun
poiché può utilizzare l'immagine pregenerata, se disponibile. Per saperne di più, consulta la guida su
TieredCompilation
.
Ottimizzare la garbage collection (GC)
.NET fornisce due profili generali per la raccolta dei rifiuti (GC): un profilo della workstation e un profilo del server. Questi due profili hanno trade-off di rendimento diversi. Le app che utilizzano la libreria .NET di Google Ads tendono ad avere un rendimento migliore se vengono eseguite in un profilo server. Puoi trarre vantaggio dalla messa a punto delle seguenti impostazioni di Google Cloud.
Garbage collection del server:la garbage collection del server consente al runtime .NET di offrire un rendimento migliore a un'app API Google Ads operando su più thread. Per ulteriori dettagli, consulta questa guida. Puoi attivare la raccolta dei rifiuti del server aggiungendo le seguenti righe al file
.csproj
dell'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 per l'elaborazione di report di grandi dimensioni. Puoi attivare la raccolta dei rifiuti simultanea aggiungendo le seguenti righe al file
.csproj
della tua app.<PropertyGroup> <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection> </PropertyGroup>
Mantieni la raccolta dei rifiuti della VM: l'
RetainVMGarbageCollection
impostazione configura se i segmenti di memoria virtuale da eliminare devono essere inseriti in un elenco di attesa per un uso futuro o se devono essere restituiti al sistema operativo. Puoi attivare la conservazione della memoria virtuale aggiungendo le seguenti righe all'app.<PropertyGroup> <RetainVMGarbageCollection>true</RetainVMGarbageCollection> </PropertyGroup>
Puoi ottimizzare il tuo gruppo di controllo scegliendo una configurazione 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 in App.config
dell'app SDK .NET.