Biblioteka klienta Google Ads dla języka .NET upraszcza interakcje aplikacji z interfejsem Google Ads API, wymagając przy tym minimalnej konfiguracji. Ogólna wydajność zależy jednak w dużej mierze od sposobu używania biblioteki i jej integracji z aplikacją.
Ten przewodnik zawiera informacje o optymalizacji skuteczności aplikacji .NET i uzupełnia sprawdzone metody, które mają ogólne zastosowanie do interfejsu Google Ads API.
W miarę możliwości używaj ponownie GoogleAdsClient
GoogleAdsClient reprezentuje sesję użytkownika podczas wywoływania interfejsu API. Zapewnia optymalizacje takie jak:
- buforowanie kanałów gRPC używanych przez usługi interfejsu API; Skraca to czas konfiguracji podczas wykonywania początkowych wywołań interfejsu API.
- W miarę możliwości używaj ponownie tokenów dostępu. Zmniejsza to liczbę operacji w obie strony, które biblioteka klienta .NET Google Ads musi wykonać, aby odświeżyć tokeny dostępu.
Jeśli to możliwe, używaj tokenów dostępu z poziomu konta menedżera.
Jeśli masz token dostępu wydany na poziomie konta menedżera, możesz go używać do wywoływania interfejsu API na wszystkich kontach klientów Google Ads w hierarchii tego konta.
W połączeniu z ponownym użyciem instancji GoogleAdsClient może to jeszcze bardziej zmniejszyć liczbę operacji w obie strony, które biblioteka klienta musi wykonać, aby odświeżyć tokeny dostępu.
Jeśli to możliwe, używaj SearchStream zamiast Search.
Interfejs Google Ads API udostępnia 2 główne sposoby pobierania obiektów: GoogleAdsService.Search (który korzysta ze stronicowania) i GoogleAdsService.SearchStream (który korzysta ze strumieniowania).
Search wysyła wiele żądań z podziałem na strony, aby pobrać cały raport, natomiast SearchStream wysyła jedno żądanie i inicjuje trwałe połączenie z interfejsem Google Ads API niezależnie od rozmiaru raportu. Dzięki wyeliminowaniu czasu przesyłu sieciowego w obie strony potrzebnego na przesłanie żądania każdej strony odpowiedzi Search SearchStream zwykle zapewnia lepszą wydajność niż stronicowanie. Więcej informacji o tym, kiedy wybrać daną metodę, znajdziesz w przewodniku po raportach strumieniowych.
Ręczne zarządzanie odświeżaniem tokenów dostępu
W niektórych środowiskach bezstanowych, takich jak Google Cloud Functions, ponowne używanie instancji GoogleAdsClient w różnych wywołaniach może nie być możliwe.
Takie środowiska mają własne sprawdzone metody utrwalania i ponownego wykorzystywania danych.
W Google.Ads.GoogleAds v27.0.0 i nowszych możesz wstrzykiwać własną wstępnie skonfigurowaną instancję ICredential bezpośrednio do GoogleAdsConfig za pomocą właściwości Credentials i wyłączyć buforowanie kanału (UseChannelCache = false).
Jeśli wolisz hermetyzować tworzenie danych logowania w niestandardowej klasie konfiguracji (lub używasz starszej wersji biblioteki), możesz rozszerzyć klasę GoogleAdsConfig, aby samodzielnie odświeżać tokeny dostępu w ten sposób:
// 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);
Kompilowanie do publikacji
Pamiętaj, aby podczas wdrażania na serwerze skompilować aplikację przy użyciu konfiguracji wersji. Podczas korzystania z konfiguracji debugowania aplikacja kompiluje się z pełnymi symbolicznymi informacjami na potrzeby debugowania i bez optymalizacji kompilatora.
Profilowanie aplikacji
Profiluj aplikację pod kątem wykorzystania procesora i pamięci, aby zidentyfikować wąskie gardła wydajności. Visual Studio udostępnia narzędzia diagnostyczne, które pomagają profilować aplikację. Dostępne są też inne komercyjne narzędzia do profilowania.
Używanie metod asynchronicznych
Programowanie asynchroniczne z użyciem paradygmatu async-await pomaga uniknąć wąskich gardeł i zwiększa ogólną szybkość działania aplikacji. Biblioteka .NET Google Ads generuje metody asynchroniczne dla wszystkich usług i metod RPC.
Anulowanie metod asynchronicznych
Możesz użyć parametru callSettings, aby przekazać CancellationToken do metod asynchronicznych, takich jak SearchStreamAsync:
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);
Wyłączanie rejestrowania, gdy jest to możliwe
Biblioteka .NET Google Ads domyślnie wyłącza logowanie i stosuje podejście leniwego logowania, które zwiększa wydajność aplikacji. Jeśli włączysz logowanie podczas programowania, pamiętaj, aby wyłączyć je w środowisku produkcyjnym. Jeśli musisz monitorować konkretne nieudane żądania w środowisku produkcyjnym, możesz wykonać co najmniej 1 z tych czynności bez negatywnego wpływu na wydajność aplikacji:
- Włącz tylko logi podsumowania.
- Ustaw pełne logi na poziom
ERROR. - Zapisz identyfikator żądania w przypadku konkretnych nieudanych żądań, aby móc go udostępnić w sposób kontaktu z zespołem pomocy.
Więcej informacji znajdziesz w przewodniku po logowaniu.
Używanie opcji ReadyToRun
Nowoczesny .NET obsługuje wstępną kompilację plików binarnych na potrzeby konkretnej platformy i architektury przez ustawienie PublishReadyToRun na true, a następnie opublikowanie pliku binarnego przez określenie prawidłowego RuntimeIdentifier. Więcej informacji znajdziesz w przewodniku po wdrażaniu ReadyToRun.
Użyj TieredCompilation
TieredCompilation (domyślnie włączona w nowoczesnych wersjach .NET, takich jak .NET 8) umożliwia .NET identyfikowanie hotspotów i poprawianie wydajności środowiska wykonawczego. Kompilacja wielopoziomowa dobrze współpracuje z ReadyToRun, ponieważ może używać wstępnie wygenerowanego obrazu do szybkiego uruchamiania, a następnie rekompilować często używane metody z pełną optymalizacją.
Więcej informacji znajdziesz w przewodniku po TieredCompilation.
Dostosowywanie czyszczenia pamięci (GC)
.NET udostępnia 2 ogólne profile czyszczenia pamięci: profil stacji roboczej i profil serwera. Te 2 profile mają różne kompromisy dotyczące wydajności. Aplikacje na serwerach dedykowanych, które korzystają z biblioteki .NET Google Ads, często działają lepiej, gdy są uruchamiane w profilu serwera.
Możesz dostosować te ustawienia GC:
Odzyskiwanie pamięci serwera: odzyskiwanie pamięci serwera umożliwia środowisku wykonawczemu .NET zwiększenie przepustowości aplikacji interfejsu Google Ads API przez działanie na wielu stertach i wątkach odzyskiwania pamięci. Więcej informacji znajdziesz w przewodniku po GC serwera. Aby włączyć odzyskiwanie pamięci na serwerze, dodaj te wiersze do pliku
.csprojaplikacji:<PropertyGroup> <ServerGarbageCollection>true</ServerGarbageCollection> </PropertyGroup>Współbieżne odśmiecanie pamięci: możesz włączyć współbieżne odśmiecanie pamięci, aby zapewnić modułowi odśmiecania pamięci .NET dedykowany wątek do odśmiecania pamięci w generacji 2. To ustawienie może być przydatne podczas przetwarzania dużych raportów. Aby włączyć równoczesne odzyskiwanie pamięci, dodaj te wiersze do pliku
.csprojaplikacji:<PropertyGroup> <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection> </PropertyGroup>Zachowaj czyszczenie pamięci maszyny wirtualnej: ustawienie
RetainVMGarbageCollectionokreśla, czy segmenty pamięci wirtualnej, które powinny zostać usunięte, są umieszczane na liście oczekujących do wykorzystania w przyszłości, czy są zwracane do systemu operacyjnego. Możesz włączyć przechowywanie pamięci wirtualnej, dodając te wiersze do pliku.csprojaplikacji:<PropertyGroup> <RetainVMGarbageCollection>true</RetainVMGarbageCollection> </PropertyGroup>
Możesz dostosować GC, wybierając konfigurację, która równoważy zachowanie stacji roboczej i serwera. Wszystkie odpowiednie ustawienia GC można określić w pliku runtimeconfig.json aplikacji .NET, za pomocą zmiennych środowiskowych lub w pliku App.config.