Anwendungsleistung

Die Google Ads .NET-Clientbibliothek vereinfacht die Interaktionen Ihrer App mit der Google Ads API und erfordert nur eine minimale Konfiguration. Die Gesamtleistung hängt jedoch stark davon ab, wie die Bibliothek verwendet und in Ihre App eingebunden wird.

In dieser Anleitung werden Leistungsoptimierungen behandelt, die speziell für .NET-Apps gelten. Sie ergänzt die Best Practices, die allgemein für die Google Ads API gelten.

`GoogleAdsClient` nach Möglichkeit wiederverwenden

GoogleAdsClient stellt die Sitzung eines Nutzers dar, wenn API-Aufrufe ausgeführt werden. Es bietet Optimierungen wie:

  • Caching der gRPC-Kanäle die von API-Diensten verwendet werden. Dadurch wird die Einrichtungszeit bei ersten API-Aufrufen verkürzt.
  • Zugriffstokens nach Möglichkeit wiederverwenden. Dadurch wird die Anzahl der Roundtrips reduziert, die die Google Ads .NET-Clientbibliothek ausführen muss, um Zugriffstokens zu aktualisieren.

Nach Möglichkeit Zugriffstokens von einem Verwaltungskonto verwenden

  • Wenn Sie ein Zugriffstoken haben, das auf Verwaltungskontoebene ausgestellt wurde, können Sie damit API-Aufrufe für alle Google Ads-Clientkonten in dieser Kontohierarchie ausführen. In Kombination mit der Wiederverwendung von GoogleAdsClient-Instanzen kann dies die Anzahl der Roundtrips weiter reduzieren, die die Clientbibliothek ausführen muss, um Zugriffstokens zu aktualisieren.

Nach Möglichkeit `SearchStream` anstelle von `Search` verwenden

Mit GoogleAdsService.Search können mehrere paginierte Anfragen gesendet werden, um den gesamten Bericht herunterzuladen. Mit GoogleAdsService.SearchStream wird jedoch eine einzelne Anfrage gesendet und eine dauerhafte Verbindung zur Google Ads API hergestellt, unabhängig von der Berichtsgröße. Da die Roundtrip-Netzwerkzeit entfällt, die erforderlich ist, um jede einzelne Seite einer Search Antwort anzufordern, bietet SearchStream je nach App möglicherweise eine bessere Leistung als die Paginierung. Weitere Informationen zu dieser Optimierung finden Sie unter Search versus SearchStream.

Aktualisierungen von Zugriffstokens manuell verwalten

In bestimmten Umgebungen wie Google Cloud Functions ist es möglicherweise nicht möglich, GoogleAdsClient Instanzen wiederzuverwenden. Solche Umgebungen können eigene Best Practices zum Beibehalten und Wiederverwenden von Daten haben. In solchen Fällen können Sie die Klasse GoogleAdsConfig erweitern, um Ihre eigenen Aktualisierungen von Zugriffstokens wie folgt auszuführen.

// 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);

Für Release-Build kompilieren

Kompilieren Sie Ihre App mit der Release Konfiguration , wenn Sie sie auf dem Server bereitstellen. Bei Verwendung der Debug-Konfiguration wird Ihre App mit vollständigen symbolischen Debug-Informationen und ohne Optimierung kompiliert.

App-Profil erstellen

Erstellen Sie ein Profil Ihrer App sowohl für die CPU- als auch für die Arbeitsspeichernutzung, um Leistungsengpässe zu identifizieren. Visual Studio bietet Diagnosetools, mit denen Sie ein Profil Ihrer App erstellen können. Es sind auch andere kommerzielle Profiling-Tools verfügbar.

Asynchrone Methoden verwenden

Die asynchrone Programmierung mit dem Async-Await Paradigma hilft, Leistungsengpässe zu vermeiden und die allgemeine Reaktionsfähigkeit Ihrer App zu verbessern. Die Google Ads .NET-Bibliothek generiert asynchrone Methoden für alle Dienste und RPC-Methoden.

Asynchrone Methoden abbrechen

Mit dem callSettings Parameter können Sie ein CancellationToken an asynchrone Methoden übergeben:

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
);

Logging deaktivieren, wenn möglich

In der Google Ads .NET-Bibliothek ist das Logging standardmäßig deaktiviert. Es wird ein Lazy-Logging-Ansatz verwendet, der die Leistung Ihrer App verbessert. Wenn Sie das Logging aktivieren, müssen Sie es in der Produktionsumgebung deaktivieren. Wenn Sie in der Produktion nach bestimmten fehlgeschlagenen Anfragen suchen müssen, können Sie einen oder mehrere der folgenden Schritte ausführen, ohne die Leistung Ihrer App zu beeinträchtigen:

  • Nur die Zusammenfassungsprotokolle aktivieren.
  • Die vollständigen Protokolle auf die Ebene ERROR setzen.
  • Die Anfrage-ID für bestimmte Anfragen speichern, die für Sie von Interesse sind und die Sie mit den Supportkanälen teilen können.

Weitere Informationen finden Sie im Leitfaden zum Logging.

Entscheiden, ob die Methode `SearchStream` oder `Search` verwendet werden soll

Die Google Ads API bietet zwei Hauptmethoden zum Abrufen von Objekten: die Search Methode (mit Paginierung) und SearchStream (mit Streaming).

SearchStream bietet eine bessere Leistung als Search, aber es gibt Szenarien, in denen Search bevorzugt wird.

Weitere Informationen zu den beiden Methoden finden Sie im Leitfaden zu Streaming-Berichten.

Option `ReadyToRun` verwenden

.NET Core 3.1 bietet Unterstützung für die Vorkompilierung Ihrer Binärdateien für eine bestimmte Plattform und Architektur. Dazu müssen Sie die Einstellung PublishReadyToRun auf true setzen und die Binärdatei dann veröffentlichen, indem Sie beim Veröffentlichen eine gültige RuntimeIdentifier angeben. Weitere Informationen finden Sie im Leitfaden zur ReadyToRun Funktion.

`TieredCompilation` verwenden

Mit TieredCompilation kann .NET Hotspots identifizieren und die Leistung verbessern. Die mehrstufige Kompilierung funktioniert besser mit der Option ReadyToRun, da das vorab generierte Image verwendet werden kann, wenn es verfügbar ist. Weitere Informationen finden Sie im Leitfaden zu TieredCompilation.

Automatische Speicherbereinigung optimieren

.NET bietet zwei allgemeine Profile für die automatische Speicherbereinigung: ein Workstation-Profil und ein Serverprofil. Diese beiden Profile haben unterschiedliche Leistung skompromisse. Apps, die die Google Ads .NET-Bibliothek verwenden, funktionieren in der Regel besser, wenn sie mit einem Serverprofil ausgeführt werden. Sie können die folgenden Einstellungen für die automatische Speicherbereinigung optimieren.

  • Automatische Speicherbereinigung auf dem Server:Die automatische Speicherbereinigung auf dem Server ermöglicht es der .NET-Laufzeit, die Leistung einer Google Ads API-App zu verbessern, indem sie mit mehreren Threads arbeitet. Weitere Informationen finden Sie in dieser Anleitung. Sie können die automatische Speicherbereinigung auf dem Server aktivieren, indem Sie der .csproj-Datei Ihrer App die folgenden Zeilen hinzufügen.

    <PropertyGroup>
      <ServerGarbageCollection>true</ServerGarbageCollection>
    </PropertyGroup>
    
  • Gleichzeitige automatische Speicherbereinigung: Sie können die gleichzeitige automatische Speicherbereinigung aktivieren, um der .NET-automatischen Speicherbereinigung einen dedizierten Thread für die automatische Speicherbereinigung in Generation 2 zuzuweisen. Diese Einstellung kann nützlich sein, wenn Sie Berichte mit großen Datenmengen verarbeiten. Sie können die gleichzeitige automatische Speicherbereinigung aktivieren, indem Sie der .csproj-Datei Ihrer App die folgenden Zeilen hinzufügen.

    <PropertyGroup>
      <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection>
    </PropertyGroup>
    
  • Automatische Speicherbereinigung für VMs beibehalten: Mit der Einstellung RetainVMGarbageCollection wird konfiguriert, ob Segmente des virtuellen Arbeitsspeichers, die gelöscht werden sollen, auf eine Standby-Liste für die zukünftige Verwendung gesetzt oder an das Betriebssystem zurückgegeben werden. Sie können die Beibehaltung des virtuellen Arbeitsspeichers aktivieren, indem Sie Ihrer App die folgenden Zeilen hinzufügen.

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

Sie können die automatische Speicherbereinigung optimieren, indem Sie eine Einrichtung wählen, die zwischen einer Workstation und einem Server liegt. Alle relevanten Einstellungen werden in der Datei runtimeconfig.json Ihrer .NET Core-App, einer Umgebungsvariablen oder in der Datei App.config Ihrer .NET SDK-App angegeben.