Prestazioni delle applicazioni

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, il rendimento complessivo dipende in larga misura 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.

Riutilizzare GoogleAdsClient quando 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 si riduce il tempo di configurazione durante le chiamate API iniziali.
  • Riutilizzo dei 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.

Utilizzare i token di accesso da un account a livello di amministratore quando possibile

  • Se hai un token di accesso rilasciato 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 round trip che la libreria client deve eseguire per aggiornare i token di accesso.

Utilizzare SearchStream anziché Search quando possibile

Mentre 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 rete di round trip necessario per richiedere ogni singola pagina di una risposta Search, a seconda dell' app, SearchStream potrebbe offrire un rendimento migliore rispetto alla paginazione. Per saperne di più su questa ottimizzazione, consulta Search versus SearchStream.

Gestire manualmente gli aggiornamenti dei token di accesso

In alcuni ambienti, come Google Cloud Functions, potrebbe non essere possibile riutilizzare GoogleAdsClient istanze. Questi ambienti possono avere le proprie best practice per conservare e riutilizzare i 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);

Compilare per la build di release

Assicurati di compilare l'app utilizzando Release configuration durante il deployment sul server. Quando utilizzi la configurazione Debug, l'app viene compilata con informazioni di debug simboliche complete e senza ottimizzazione.

Profilare l'app

Profila l'app sia per l'utilizzo della CPU sia per la memoria utilizzata per identificare i colli di bottiglia delle prestazioni. Visual Studio fornisce strumenti di diagnostica per aiutarti a profilare l'app. Sono disponibili anche altri strumenti di profilazione commerciali che sono disponibili.

Utilizzare metodi asincroni

La programmazione asincrona che utilizza il paradigma async-await aiuta a evitare i colli di bottiglia delle prestazioni e a migliorare 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 callSettings parametro 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.V25.GoogleAdsService);

googleAdsService.SearchStream(request,
    delegate (SearchGoogleAdsStreamResponse resp)
    {
        foreach (GoogleAdsRow googleAdsRow in resp.Results)
        {
            // Process the row.
        }
    }, callSettings
);

Disattivare il logging quando possibile

La libreria .NET di Google Ads disattiva il logging per impostazione predefinita e utilizza un approccio di logging lazy che offre un rendimento migliore all'app. Se attivi il logging, assicurati di disattivarlo 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 dell'app:

  • Attiva solo i log di riepilogo.
  • Imposta i log completi sul livello ERROR.
  • Salva l'ID richiesta per le richieste specifiche di interesse che puoi condividere con i canali di assistenza.

Per saperne di più, consulta la guida al logging.

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 un rendimento migliore rispetto a Search, ma ci sono scenari in cui Search è preferibile.

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 quindi pubblicando il file binario specificando un RuntimeIdentifier valido durante la pubblicazione. Per saperne di più, consulta la guida alla ReadyToRun funzionalità per saperne di più.

Utilizzare TieredCompilation

TieredCompilation consente a .NET di identificare gli hotspot e migliorare il suo rendimento. La compilazione a livelli funziona meglio con l'opzione ReadyToRun, poiché può utilizzare l'immagine pregenerata quando disponibile. Per saperne di più, consulta la guida a TieredCompilation.

Ottimizzare 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 che utilizzano la libreria .NET di Google Ads tendono a funzionare meglio 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 offrire un rendimento migliore a un'app dell'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 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 quando si elaborano report di grandi dimensioni. Puoi attivare la garbage collection simultanea aggiungendo le seguenti righe al file .csproj dell'app.

    <PropertyGroup>
      <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection>
    </PropertyGroup>
    
  • Conservare la garbage collection della VM: l'impostazione RetainVMGarbageCollection configura 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 all'app.

    <PropertyGroup>
      <RetainVMGarbageCollection>true</RetainVMGarbageCollection>
    </PropertyGroup>
    

Puoi ottimizzare 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 in App.config dell'app .NET SDK.