Anwendungsleistung

Mit der Google Ads .NET-Clientbibliothek können Sie die Interaktionen Ihrer App mit der Google Ads API mit nur minimaler Konfiguration vereinfachen. Die Gesamtleistung hängt jedoch stark davon ab, wie die Bibliothek verwendet und in Ihre App eingebunden wird.

Dieser Leitfaden deckt leistungsbezogene Optimierungen ab, die speziell für .NET-Anwendungen 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. Es bietet Optimierungen wie:

  • Caching der gRPC-Kanäle, die von API-Diensten verwendet werden. Dadurch wird die Einrichtungszeit bei den ersten API-Aufrufen verkürzt.
  • Wenn möglich, sollten Zugriffstokens wiederverwendet werden. 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 Konto auf Verwaltungsebene verwenden

  • Wenn Sie ein auf Verwaltungskontoebene ausgestelltes Zugriffstoken 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 weiter reduzieren, die die Clientbibliothek ausführen muss, um Zugriffstokens zu aktualisieren.

Verwenden Sie nach Möglichkeit SearchStream anstelle von Search.

Mit GoogleAdsService.Search können Sie mehrere paginaierte Anfragen senden, um den gesamten Bericht herunterzuladen. GoogleAdsService.SearchStream sendet dagegen eine einzelne Anfrage und stellt unabhängig von der Berichtsgröße eine dauerhafte Verbindung zur Google Ads API her. Da die Netzwerklaufzeit für die Anforderung jeder einzelnen Seite einer Search-Antwort entfällt, kann SearchStream je nach App eine bessere Leistung als die Auslagerung bieten. Weitere Informationen zu dieser Optimierung finden Sie unter Suche im Vergleich zu SearchStream.

Aktualisierung von Zugriffstokens manuell verwalten

In bestimmten Umgebungen wie Google Cloud Functions ist es möglicherweise nicht möglich, GoogleAdsClient-Instanzen wiederzuverwenden. Für solche Umgebungen gelten möglicherweise eigene Best Practices für die Speicherung und Wiederverwendung von Daten. In solchen Fällen kannst du die Klasse GoogleAdsConfig erweitern, um eigene Aktualisierungen des Zugriffstokens durchzuführen. Gehe dazu so vor:

// 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. Wenn Sie die Debug-Konfiguration verwenden, wird Ihre App mit vollständigen symbolischen Debug-Informationen und ohne Optimierung kompiliert.

App-Profil erstellen

Erstellen Sie ein Profil für 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 gibt auch andere kommerzielle Profiling-Tools.

Async-Methoden verwenden

Mit der asynchronen Programmierung mit dem Async-Await-Paradigma lassen sich Leistungsengpässe vermeiden und die Gesamtreaktionsfähigkeit Ihrer App verbessern. Die Google Ads .NET-Bibliothek generiert asynchrone Methoden für alle Dienste und RPC-Methoden.

Abbruch von asynchronen Methoden

Mit dem Parameter callSettings können Sie einen 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.V19.GoogleAdsService);

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

Deaktivieren Sie die Protokollierung, wenn möglich.

Die Google Ads .NET-Bibliothek deaktiviert standardmäßig die Protokollierung und verwendet ein Lazy-Logging-Konzept, das die Leistung Ihrer App verbessert. Wenn Sie die Protokollierung aktivieren, müssen Sie sie in der Produktionsumgebung deaktivieren. Wenn Sie bestimmte fehlgeschlagene Anfragen in der Produktionsumgebung überwachen möchten, 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 für die vollständigen Protokolle die Ebene ERROR fest.
  • Speichern Sie die Anfrage-ID für bestimmte Anfragen, die Sie an die Supportkanäle weitergeben möchten.

Weitere Informationen finden Sie im Anleitung zum Erstellen von Protokollen.

Entscheiden, ob die Methode „SearchStream“ oder „Search“ verwendet werden soll

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

SearchStream bietet eine bessere Leistung als Search. Es gibt jedoch Szenarien, in denen Search vorzuziehen ist.

Weitere Informationen zu den beiden Methoden finden Sie im Leitfaden zu Streamingberichten.

ReadyToRun-Option verwenden

.NET Core 3.1 unterstützt die Vorkompilierung von Binärdateien für eine bestimmte Plattform und Architektur. Dazu geben Sie eine PublishReadyToRun-Einstellung für true an und veröffentlichen die Binärdatei dann mit einer gültigen RuntimeIdentifier. Weitere Informationen finden Sie im Leitfaden zur Funktion ReadyToRun.

TieredCompilation verwenden

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

Automatische Speicherbereinigung optimieren

.NET bietet zwei allgemeine Profile für die Garbage Collection (GC): ein Workstation-Profil und ein Serverprofil. Diese beiden Profile haben unterschiedliche Leistungseinbußen. Apps, die die Google Ads .NET-Bibliothek verwenden, erzielen in der Regel eine bessere Leistung, wenn sie in einem Serverprofil ausgeführt werden. Sie können die folgenden GC-Einstellungen optimieren.

  • Server-Garbage-Collection: Mit der Server-Garbage-Collection kann die .NET-Laufzeit die Leistung einer Google Ads API-App durch die Ausführung in mehreren Threads verbessern. Weitere Informationen finden Sie in diesem Leitfaden. Sie können die Server-Garbage Collection aktivieren, indem Sie der Datei .csproj Ihrer Anwendung die folgenden Zeilen hinzufügen.

    <PropertyGroup>
      <ServerGarbageCollection>true</ServerGarbageCollection>
    </PropertyGroup>
    
  • Parallele Garbage Collection:Sie können die parallele Garbage Collection aktivieren, um dem .NET-GC einen speziellen Thread für die Garbage Collection in Generation 2 zuzuweisen. Diese Einstellung kann bei der Verarbeitung großer Berichte nützlich sein. Sie können die gleichzeitige Garbage Collection aktivieren, indem Sie der .csproj-Datei Ihrer App die folgenden Zeilen hinzufügen.

    <PropertyGroup>
      <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection>
    </PropertyGroup>
    
  • VM-Garbage-Collection beibehalten:Mit dieser RetainVMGarbageCollectionEinstellung wird konfiguriert, ob Segmente des virtuellen Arbeitsspeichers, die gelöscht werden sollten, für die zukünftige Verwendung auf eine Standby-Liste 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 GC optimieren, indem Sie eine Konfiguration zwischen einer Workstation und einem Server wählen. Alle relevanten Einstellungen werden in der runtimeconfig.json-Datei Ihrer .NET Core-Anwendung, in einer Umgebungsvariablen oder in der App.config Ihrer .NET SDK-Anwendung angegeben.