Die .NET-Clientbibliothek für Google Ads vereinfacht die Interaktion Ihrer App mit der Google Ads API und erfordert nur minimale Konfiguration. Die Gesamtleistung hängt jedoch stark davon ab, wie die Bibliothek verwendet und in Ihre App eingebunden wird.
In diesem Leitfaden werden Leistungsoptimierungen speziell für .NET-Anwendungen behandelt. Er 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. Sie bietet Optimierungen wie:
- Caching der von API-Diensten verwendeten gRPC-Kanäle. Dadurch wird die Einrichtungszeit bei den ersten API-Aufrufen verkürzt.
- Zugriffstokens nach Möglichkeit wiederverwenden. Dadurch wird die Anzahl der Hin- und Rückflüge 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 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 Hin- und Rückflüge, 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).
Während Search mehrere paginierte Anfragen sendet, um einen gesamten Bericht herunterzuladen, sendet SearchStream eine einzelne Anfrage und initiiert eine persistente Verbindung mit der Google Ads API, unabhängig von der Berichtsgröße. Da die Netzwerkzeit für die Hin- und Rückübertragung entfällt, die für die Anforderung jeder einzelnen Seite einer Search-Antwort erforderlich ist, bietet SearchStream im Allgemeinen eine bessere Leistung als das Paging. Weitere Informationen dazu, wann Sie welche Methode auswählen 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 über Aufrufe hinweg wiederzuverwenden.
In solchen Umgebungen gelten eigene Best Practices für die Speicherung und Wiederverwendung von Daten.
In Google.Ads.GoogleAds v27.0.0 und höher können Sie Ihre eigene vorkonfigurierte ICredential-Instanz mit dem Attribut Credentials direkt in GoogleAdsConfig einfügen und das Channel-Caching (UseChannelCache = false) deaktivieren.
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 Klasse GoogleAdsConfig erweitern, um Ihre eigenen Zugriffstokens wie folgt zu aktualisieren:
// 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 Debug-Informationen und ohne Compiler-Optimierungen kompiliert.
App-Profil erstellen
Erstellen Sie ein Profil Ihrer Anwendung 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 Anwendung erstellen können. Es sind auch andere kommerzielle Profilerstellungstools 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 einen 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.V26.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 das Logging standardmäßig deaktiviert. Es wird ein Lazy-Logging-Ansatz verwendet, der die Leistung Ihrer App verbessert. Wenn Sie das Logging während der Entwicklung aktivieren, müssen Sie es in der Produktionsumgebung deaktivieren. Wenn Sie bestimmte fehlgeschlagene Anfragen in der Produktion überwachen müssen, können Sie einen oder mehrere der folgenden Schritte ausführen, ohne die Leistung Ihrer Anwendung zu beeinträchtigen:
- Aktivieren Sie nur die Zusammenfassungsprotokolle.
- Legen Sie die vollständigen Logs auf die Ebene
ERRORfest. - 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 zum Logging.
Option „ReadyToRun“ verwenden
Modernes .NET unterstützt die Vorkompilierung Ihrer Binärdateien für eine bestimmte Plattform und Architektur. Dazu legen Sie PublishReadyToRun auf true fest und veröffentlichen die Binärdatei dann mit einer gültigen RuntimeIdentifier. 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 können.
Weitere Informationen finden Sie im TieredCompilation-Leitfaden.
Automatische Speicherbereinigung optimieren
.NET bietet zwei allgemeine Profile für die automatische Speicherbereinigung (Garbage Collection, GC): ein Workstation-Profil und ein Serverprofil. Diese beiden Profile haben unterschiedliche Leistungskompromisse. Dedizierte Server-Apps, die die Google Ads .NET-Bibliothek verwenden, weisen oft eine bessere Leistung auf, wenn sie in einem Serverprofil ausgeführt werden.
Sie können von der Feinabstimmung der folgenden GC-Einstellungen profitieren:
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 auf mehreren GC-Heaps und -Threads ausgeführt wird. Weitere Informationen finden Sie im Leitfaden zur Server-GC. Sie können die Server-Garbage-Collection aktivieren, indem Sie der Datei
.csprojIhrer Anwendung 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 bei der Verarbeitung großer Berichte nützlich sein. Sie können die gleichzeitige automatische Speicherbereinigung aktivieren, indem Sie der Datei
.csprojIhrer Anwendung die folgenden Zeilen hinzufügen:<PropertyGroup> <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection> </PropertyGroup>VM-automatische Speicherbereinigung beibehalten: Mit der Einstellung
RetainVMGarbageCollectionwird konfiguriert, ob Segmente des virtuellen Speichers, die gelöscht werden sollen, für die zukünftige Verwendung in eine Standby-Liste aufgenommen oder wieder an das Betriebssystem freigegeben werden. Sie können die virtuelle Speicheraufbewahrung aktivieren, indem Sie der Datei.csprojIhrer Anwendung die folgenden Zeilen hinzufügen:<PropertyGroup> <RetainVMGarbageCollection>true</RetainVMGarbageCollection> </PropertyGroup>
Sie können die GC optimieren, indem Sie eine Einrichtung wählen, die das Verhalten von Workstation und Server ausgleicht. Alle relevanten GC-Einstellungen können in der runtimeconfig.json-Datei Ihrer .NET-Anwendung, über Umgebungsvariablen oder in Ihrer App.config angegeben werden.