Biblioteka klienta Google Ads w języku .NET upraszcza interakcje aplikacji z interfejsem Google Ads API, wymagając minimalnej konfiguracji. Ogólna wydajność zależy jednak w dużej mierze od sposobu używania i integracji biblioteki z aplikacją.
Ten przewodnik zawiera informacje o optymalizacji wydajności w przypadku aplikacji .NET i uzupełnia sprawdzone metody, które są ogólnie stosowane w przypadku interfejsu Google Ads API.
W miarę możliwości używaj ponownie interfejsu GoogleAdsClient.
GoogleAdsClient
reprezentuje sesję użytkownika podczas wywoływania interfejsu API. Umożliwia ona takie optymalizacje:
- Buforowanie kanałów gRPC używanych przez usługi interfejsu API. Dzięki temu skrócisz czas konfiguracji podczas wykonywania początkowych wywołań interfejsu API.
- W miarę możliwości używaj ponownie tokenów dostępu. Dzięki temu zmniejsza się liczba połączeń, które musi wykonać biblioteka klienta Google Ads .NET, aby odświeżyć tokeny dostępu.
W miarę możliwości używaj tokenów dostępu z poziomu konta menedżera.
- Jeśli masz token dostępu wystawiony 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ę połączeń, które biblioteka klienta musi wykonać, aby odświeżyć tokeny dostępu.
W miarę możliwości używaj SearchStream zamiast Search.
Chociaż interfejs GoogleAdsService.Search
może wysyłać wiele żądań po stronie, aby pobrać cały raport, interfejs GoogleAdsService.SearchStream
wysyła pojedyncze żądanie i inicjuje trwałe połączenie z interfejsem Google Ads API niezależnie od rozmiaru raportu. Dzięki wyeliminowaniu czasu potrzebnemu na przelot w obie strony, który jest wymagany do przesłania każdej strony odpowiedzi Search
, w zależności od aplikacji SearchStream
może zapewnić większą wydajność niż pobieranie stron. Więcej informacji o tej optymalizacji znajdziesz w artykule Porównanie Search i SearchStream.
Ręczne zarządzanie odświeżaniem tokenów dostępu
W niektórych środowiskach, takich jak Google Cloud Functions, ponowne użycie instancji GoogleAdsClient
może nie być możliwe. Takie środowiska mogą mieć własne zalecane metody przechowywania i ponownego używania danych. W takich przypadkach 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 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);
Kompilowanie wersji do publikacji
Podczas wdrażania aplikacji na serwer skompiluj ją, używając konfiguracji wersji produkcyjnej. Gdy używasz konfiguracji debugowania, aplikacja jest kompilowana z pełnymi symbolicznymi informacjami debugowania i bez optymalizacji.
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 ułatwiają profilowanie aplikacji. Dostępne są też inne narzędzia do profilowania komercyjnego.
Używanie metod asynchronicznych
Programowanie asynchroniczne z użyciem paradygmatu async-await pomaga unikać wąskich gardeł związanych ze skutecznością i zwiększać ogólną responsywność aplikacji. Biblioteka Google Ads .NET generuje asynchroniczne metody dla wszystkich usług i metod RPC.
Anulowanie asynchronicznych metod
Parametru callSettings
możesz użyć do przekazania parametru CancellationToken
do metod asynchronicznych:
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
);
Wyłączanie rejestrowania, gdy to możliwe
Biblioteka Google Ads .NET domyślnie wyłącza rejestrowanie i użyje podejścia opartego na leniwym rejestrowaniu, które zapewnia lepszą wydajność aplikacji. Jeśli włączysz rejestrowanie, pamiętaj, aby wyłączyć je w środowisku produkcyjnym. Jeśli chcesz monitorować określone żądania, które nie udają się w wersji produkcyjnej, możesz wykonać co najmniej 1 z tych czynności, nie wpływając negatywnie na wydajność aplikacji:
- Włącz tylko dzienniki podsumowania.
- Ustaw pełne dzienniki na poziom
ERROR
. - Zapisz identyfikator żądania w przypadku konkretnych żądań, które możesz udostępnić kanałom pomocy.
Więcej informacji znajdziesz w przewodniku dotyczącym rejestrowania danych.
Decydowanie, czy użyć metody SearchStream czy Search
Interfejs Google Ads API udostępnia 2 główne sposoby pobierania obiektów: metodę Search
(która korzysta z podziału na strony) i SearchStream
(która korzysta ze strumieniowego przesyłania danych).
SearchStream
zapewnia lepszą skuteczność niż Search
, ale są też sytuacje, w których preferowany jest Search
.
Więcej informacji o tych dwóch metodach znajdziesz w przewodniku po raportach dotyczących transmisji danych.
Korzystanie z opcji Gotowy do użycia
.NET Core 3.1 obsługuje wstępną kompilację plików binarnych na określoną platformę i architekturę. Aby to zrobić, należy ustawić parametr PublishReadyToRun
na true
, a następnie opublikować plik binarny, podając prawidłowy parametr RuntimeIdentifier
. Więcej informacji znajdziesz w przewodniku dotyczącym funkcji ReadyToRun
.
Używanie funkcji z poziomami
TieredCompilation
pozwala .NET wykrywać obszary wymagające poprawy i poprawiać wydajność. Kompilacja wielopoziomowa działa lepiej z opcją ReadyToRun
, ponieważ może użyć wstępnie wygenerowanego obrazu, jeśli jest dostępny. Więcej informacji znajdziesz w przewodnikuTieredCompilation
.
Dostosowanie czyszczenia pamięci (GC)
.NET udostępnia 2 ogólne profile do zbierania elementów usuniętych z pamięci: profil stacji roboczej i profil serwera. Te 2 profile mają różne kompromisy dotyczące wydajności. Aplikacje korzystające z biblioteki .NET Google Ads zwykle działają lepiej w profilu serwera. Możesz dostosować te ustawienia GC.
Wywoływanie usuwania śmieci po stronie serwera: wywołanie usuwania śmieci po stronie serwera umożliwia środowisku wykonawczemu .NET zwiększenie wydajności aplikacji Google Ads API dzięki działaniu w wielu wątkach. Więcej informacji znajdziesz w tym przewodniku. Możesz włączyć zbieranie śmieci na serwerze, dodając te wiersze do pliku
.csproj
aplikacji.<PropertyGroup> <ServerGarbageCollection>true</ServerGarbageCollection> </PropertyGroup>
Równoległe usuwanie elementów z pamięci podręcznej: możesz włączyć równoległe usuwanie elementów z pamięci podręcznej, aby zapewnić .NET GC dedykowany wątek do usuwania elementów z pamięci podręcznej w generacji 2. To ustawienie może być przydatne podczas przetwarzania raportów o dużych rozmiarach. Możesz włączyć równoległe usuwanie elementów z pamięci podręcznej, dodając do pliku
.csproj
aplikacji te wiersze:<PropertyGroup> <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection> </PropertyGroup>
Zachowaj zbieranie elementów nieużywanych z maszyny wirtualnej: to ustawienie
RetainVMGarbageCollection
określa, czy segmenty pamięci wirtualnej, które powinny zostać usunięte, zostaną umieszczone na liście w stanie gotowości do wykorzystania w przyszłości, czy zostaną zwrócone do systemu operacyjnego. Możesz włączyć utrzymanie pamięci wirtualnej, dodając do aplikacji te wiersze kodu:<PropertyGroup> <RetainVMGarbageCollection>true</RetainVMGarbageCollection> </PropertyGroup>
Możesz dostosować GC, wybierając konfigurację pośrednią między stacją roboczą a serwerem. Wszystkie odpowiednie ustawienia są określone w pliku runtimeconfig.json
aplikacji .NET Core, zmiennej środowiskowej lub pliku App.config
aplikacji pakietu SDK .NET.