Die Google Ads .NET-Clientbibliothek vereinfacht die Interaktion 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 für die ersten API-Aufrufe 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 von einem Konto auf Verwaltungskontoebene verwenden
- Wenn Sie ein Zugriffstoken auf Verwaltungskontoebene haben, können Sie es für API-Aufrufe für alle Google Ads-Kundenkonten in dieser Kontohierarchie verwenden. 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.
Während GoogleAdsService.Search
mehrere paginierte Anfragen senden kann, um den gesamten Bericht herunterzuladen, sendet GoogleAdsService.SearchStream
eine einzelne Anfrage und initiiert unabhängig von der Berichtsgröße eine dauerhafte Verbindung mit der Google Ads API. Wenn Sie die Roundtrip-Netzwerkzeit eliminieren, die zum Anfordern jeder einzelnen Seite einer Search
-Antwort erforderlich ist, kann SearchStream
je nach App eine bessere Leistung als die Paginierung bieten. Weitere Informationen zu dieser Optimierung finden Sie unter Search im Vergleich zu SearchStream.
Aktualisierungen 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 können eigene Best Practices zum Speichern und Wiederverwenden von Daten gelten. In solchen Fällen können Sie die Klasse GoogleAdsConfig
so erweitern, dass Ihre eigenen Zugriffstokenaktualisierungen ausgeführt werden.
// 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
Achten Sie darauf, dass Sie Ihre App mit der Release-Konfiguration kompilieren, wenn Sie sie auf dem Server bereitstellen. Bei Verwendung der Debug-Konfiguration wird Ihre App mit vollständigen symbolischen Debuginformationen und ohne Optimierung kompiliert.
App-Profil erstellen
Profilieren Sie Ihre App sowohl für die CPU- als auch für die Speichernutzung, 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 ü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.V21.GoogleAdsService);
googleAdsService.SearchStream(request,
delegate (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 aktivieren, müssen Sie sie in der Produktionsumgebung wieder deaktivieren. Wenn Sie in der Produktionsumgebung 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 Anfragen, die Sie mit den Supportkanälen teilen können.
Weitere Informationen finden Sie im Leitfaden zur Protokollierung.
Entscheiden, ob Sie die SearchStream- oder die Search-Methode verwenden möchten
Die Google Ads API bietet zwei Hauptmethoden zum Abrufen von Objekten: die Methode Search
(mit Paginierung) und SearchStream
(mit Streaming).
SearchStream
bietet eine bessere Leistung als Search
, es gibt jedoch Szenarien, in denen Search
bevorzugt wird.
Weitere Informationen zu den beiden Methoden finden Sie im Leitfaden zu Streamingberichten.
Option „ReadyToRun“ verwenden
Mit .NET Core 3.1 wird die Unterstützung für das Vorkompilieren von Binärdateien für eine bestimmte Plattform und Architektur hinzugefügt. Dazu wird die Einstellung PublishReadyToRun
auf true
festgelegt und die Binärdatei dann durch Angabe eines gültigen RuntimeIdentifier
veröffentlicht. Weitere Informationen zur Funktion ReadyToRun
TieredCompilation verwenden
TieredCompilation
ermöglicht es .NET, Hotspots zu identifizieren und die Leistung zu verbessern. Die mehrstufige Kompilierung funktioniert besser mit der Option ReadyToRun
, da sie das vorab generierte Image verwenden kann, sofern es verfügbar ist. Weitere Informationen 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 Leistungskompromisse. 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 Einstellungen für die Garbage Collection optimieren.
Server Garbage Collection:Mit der Server Garbage Collection kann die .NET-Laufzeit die Leistung einer Google Ads API-Anwendung verbessern, indem sie auf mehreren Threads ausgeführt wird. Weitere Informationen finden Sie in diesem Leitfaden. Sie können die Garbage Collection auf dem Server aktivieren, indem Sie die folgenden Zeilen zur Datei
.csproj
Ihrer App hinzufügen.<PropertyGroup> <ServerGarbageCollection>true</ServerGarbageCollection> </PropertyGroup>
Parallele automatische Speicherbereinigung:Sie können die parallele automatische Speicherbereinigung aktivieren, um .NET GC einen dedizierten Thread für die automatische Speicherbereinigung in Generation 2 zuzuweisen. Diese Einstellung kann hilfreich sein, wenn Sie Berichte mit großen Datenmengen verarbeiten. Sie können die parallele Garbage Collection aktivieren, indem Sie die folgenden Zeilen in die
.csproj
-Datei Ihrer App einfügen.<PropertyGroup> <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection> </PropertyGroup>
VM-Garbage Collection 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 Ihrer App die folgenden Zeilen hinzufügen.<PropertyGroup> <RetainVMGarbageCollection>true</RetainVMGarbageCollection> </PropertyGroup>
Sie können Ihren GC optimieren, indem Sie sich für eine Einrichtung entscheiden, die zwischen einer Workstation und einem Server liegt. Alle relevanten Einstellungen werden in der Datei runtimeconfig.json
Ihrer .NET Core-App, einer Umgebungsvariable oder in der Datei App.config
Ihrer .NET SDK-App angegeben.