Anwendungsleistung

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

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

GoogleAdsClient nach Möglichkeit wiederverwenden

GoogleAdsClient steht für die Sitzung eines Nutzers bei API-Aufrufen. Sie bietet Optimierungen wie:

  • Zwischenspeichern der von API-Diensten verwendeten gRPC-Channels. 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 zum Aktualisieren von Zugriffstokens ausführen muss.

Nach Möglichkeit Zugriffstokens aus einem Konto auf Verwaltungskontoebene verwenden

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

Verwenden Sie nach Möglichkeit SearchStream anstelle von Search.

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

Bei Search werden mehrere paginierte Anfragen gesendet, um einen vollständigen Bericht herunterzuladen. Bei SearchStream wird eine einzelne Anfrage gesendet und eine dauerhafte Verbindung mit der Google Ads API hergestellt, unabhängig von der Berichtsgröße. Da die Round-Trip-Netzwerkzeit entfällt, die zum Anfordern jeder einzelnen Seite einer Search-Antwort erforderlich ist, bietet SearchStream in der Regel eine bessere Leistung als die Paginierung. Weitere Informationen dazu, wann Sie welche Methode verwenden sollten, finden Sie im Leitfaden zu Streamingberichten.

Aktualisierungen von Zugriffstokens manuell verwalten

In bestimmten zustandslosen Umgebungen wie Google Cloud Functions ist es möglicherweise nicht möglich, GoogleAdsClient-Instanzen für mehrere Aufrufe wiederzuverwenden. Für solche Umgebungen gelten eigene Best Practices zum Speichern und Wiederverwenden von Daten.

In Google.Ads.GoogleAds v27.0.0 und höher können Sie Ihre eigene vorkonfigurierte ICredential-Instanz direkt in GoogleAdsConfig einfügen. Verwenden Sie dazu das Attribut Credentials und deaktivieren Sie das Channel-Caching (UseChannelCache = false).

Wenn Sie die Erstellung von Anmeldedaten lieber in einer benutzerdefinierten Konfigurationsklasse kapseln möchten (oder eine frühere Version der Bibliothek verwenden), können Sie die GoogleAdsConfig-Klasse erweitern, um Ihre eigenen Zugriffstokenaktualisierungen wie folgt auszuführen:

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

Für Release-Build kompilieren

Achten Sie darauf, dass Sie Ihre App mit der Release-Konfiguration kompilieren, wenn Sie sie auf dem Server bereitstellen. Wenn Sie die Debug-Konfiguration verwenden, wird Ihre App mit vollständigen symbolischen Debugging-Informationen und ohne Compiler-Optimierungen kompiliert.

App-Profil erstellen

Profilieren Sie Ihre App sowohl für die CPU- als auch für die Arbeitsspeichernutzung, um Leistungsengpässe zu identifizieren. Visual Studio bietet Diagnosetools, mit denen Sie Ihre App profilieren können. Es sind auch andere kommerzielle Profilierungstools verfügbar.

Asynchrone Methoden verwenden

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.

Abbrechen asynchroner Methoden

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

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

Protokollierung deaktivieren, wenn möglich

In der Google Ads .NET-Bibliothek ist die Protokollierung standardmäßig deaktiviert. Außerdem wird ein Lazy-Logging-Ansatz verwendet, der die Leistung Ihrer App verbessert. Wenn Sie die Protokollierung während der Entwicklung aktivieren, müssen Sie sie 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:

  • Aktivieren Sie nur die Zusammenfassungsprotokolle.
  • Legen Sie die vollständigen Logs auf die Ebene ERROR fest.
  • Speichern Sie die Anfrage-ID für bestimmte fehlgeschlagene Anfragen, damit Sie sie an Supportkanäle weitergeben können.

Weitere Informationen finden Sie im Leitfaden zur Protokollierung.

Option „ReadyToRun“ verwenden

Mit dem modernen .NET können Sie Ihre Binärdateien für eine bestimmte Plattform und Architektur vorkompilieren, indem Sie PublishReadyToRun auf true festlegen. Anschließend können Sie die Binärdatei veröffentlichen, indem Sie ein gültiges RuntimeIdentifier angeben. Weitere Informationen finden Sie im Bereitstellungsleitfaden für ReadyToRun.

TieredCompilation verwenden

TieredCompilation (standardmäßig in modernen .NET-Versionen wie .NET 8 aktiviert) ermöglicht es .NET, Hotspots zu identifizieren und die Laufzeitleistung zu verbessern. Die mehrstufige Kompilierung funktioniert gut mit ReadyToRun, da das vorab generierte Image für einen schnellen Start verwendet werden kann und dann häufig verwendete Methoden mit vollständigen Optimierungen neu kompiliert werden. Weitere Informationen finden Sie im TieredCompilation-Leitfaden.

Automatische Speicherbereinigung optimieren

.NET bietet zwei allgemeine Profile für die automatische Speicherbereinigung (GC): ein Workstation-Profil und ein Serverprofil. Diese beiden Profile haben unterschiedliche Leistungsmerkmale. Apps für dedizierte Server, die die Google Ads .NET-Bibliothek verwenden, funktionieren oft besser, wenn sie in einem Serverprofil ausgeführt werden.

Sie können die folgenden Einstellungen für die Garbage Collection optimieren:

  • Server-Garbage Collection:Mit der Server-Garbage Collection kann die .NET-Laufzeitumgebung einer Google Ads API-Anwendung einen höheren Durchsatz ermöglichen, indem sie mehrere GC-Heaps und ‑Threads verwendet. Weitere Informationen finden Sie im Leitfaden zur Server-GC. Sie können die automatische Speicherbereinigung des Servers aktivieren, indem Sie der Datei .csproj 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-GC einen dedizierten Thread für die automatische Speicherbereinigung in Generation 2 zuzuweisen. Diese Einstellung kann beim Verarbeiten großer Berichte hilfreich sein. Sie können die gleichzeitige Garbage Collection aktivieren, indem Sie der Datei .csproj Ihrer App die folgenden Zeilen hinzufügen:

    <PropertyGroup>
      <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection>
    </PropertyGroup>
    
  • VM-automatische Speicherbereinigung beibehalten:Mit der Einstellung RetainVMGarbageCollection wird konfiguriert, ob Segmente des virtuellen Speichers, 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 Speichers aktivieren, indem Sie die folgenden Zeilen zur Datei .csproj Ihrer App hinzufügen:

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

Sie können die GC optimieren, indem Sie eine Einrichtung auswählen, die das Verhalten von Arbeitsstationen und Servern ausbalanciert. Alle relevanten GC-Einstellungen können in der Datei runtimeconfig.json Ihrer .NET-App, über Umgebungsvariablen oder in Ihrer App.config angegeben werden.