Biblioteka klienta Google Ads .NET upraszcza interakcje aplikacji z interfejsem Google Ads API przy minimalnej konfiguracji po Twojej stronie. 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 wydajności aplikacji .NET i uzupełnia sprawdzone metody, które mają ogólne zastosowanie w przypadku interfejsu Google Ads API.
W miarę możliwości używaj ponownie obiektu GoogleAdsClient
GoogleAdsClient
reprezentuje sesję użytkownika podczas wywoływania interfejsu API. Zapewnia optymalizacje takie jak:
- buforowanie kanałów gRPC używanych przez usługi API; Skraca to czas konfiguracji podczas wykonywania początkowych wywołań interfejsu API.
- w miarę możliwości ponownie używać tokenów dostępu; Zmniejsza to liczbę podróży w obie strony, które biblioteka klienta Google Ads .NET musi wykonać, aby odświeżyć tokeny dostępu.
W miarę możliwości używaj tokenów dostępu z konta na poziomie 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 wykorzystywaniem instancji
GoogleAdsClient
może to dodatkowo zmniejszyć liczbę rund, które biblioteka klienta musi wykonać, aby odświeżyć tokeny dostępu.
W miarę możliwości używaj SearchStream zamiast Search
Funkcja GoogleAdsService.Search
może wysyłać wiele żądań podzielonych na strony, aby pobrać cały raport, natomiast funkcja GoogleAdsService.SearchStream
wysyła jedno żądanie i nawiązuje trwałe połączenie z interfejsem Google Ads API niezależnie od rozmiaru raportu. Eliminując czas potrzebny na wysłanie żądania do sieci i otrzymanie odpowiedzi dla każdej strony odpowiedzi Search
, w zależności od aplikacji SearchStream
może zapewnić większą wydajność niż stronicowanie. Więcej informacji o tej optymalizacji znajdziesz w artykule Wyszukiwanie a SearchStream.
Ręczne zarządzanie odświeżaniem tokena dostępu
W niektórych środowiskach, np. Google Cloud Functions, ponowne użycie instancji GoogleAdsClient
może być niemożliwe. W takich środowiskach mogą obowiązywać własne sprawdzone metody przechowywania i ponownego wykorzystywania danych. W takich przypadkach możesz rozszerzyć klasę GoogleAdsConfig
, aby samodzielnie odświeżać token 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 kompilacji do publikacji
Podczas wdrażania aplikacji na serwerze upewnij się, że kompilujesz ją za pomocą konfiguracji wersji. W przypadku konfiguracji Debug 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 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 unikać wąskich gardeł wydajności i zwiększać ogólną szybkość reakcji aplikacji. Biblioteka Google Ads .NET generuje metody asynchroniczne dla wszystkich usług i metod RPC.
Anulowanie metod asynchronicznych
Za pomocą parametru callSettings
możesz przekazywać wartość
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.V20.GoogleAdsService);
googleAdsService.SearchStream(request,
delegate (SearchGoogleAdsStreamResponse resp)
{
foreach (GoogleAdsRow googleAdsRow in resp.Results)
{
// Process the row.
}
}, callSettings
);
Wyłącz rejestrowanie, gdy to możliwe
Biblioteka Google Ads .NET domyślnie wyłącza logowanie i korzysta z podejścia leniwego logowania, co zwiększa wydajność aplikacji. Jeśli włączysz rejestrowanie, pamiętaj, aby wyłączyć je w środowisku produkcyjnym. Jeśli chcesz monitorować konkretne żądania, które nie działają w wersji produkcyjnej, możesz wykonać co najmniej 1 z tych kroków bez negatywnego wpływu na wydajność aplikacji:
- Włącz tylko dzienniki podsumowania.
- Ustaw pełne logi na poziom
ERROR
. - Zapisz identyfikator żądania w przypadku konkretnych żądań, które Cię interesują i które możesz udostępnić kanałom pomocy.
Więcej informacji znajdziesz w przewodniku po rejestrowaniu.
Decydowanie, czy użyć metody SearchStream czy Search
Interfejs Google Ads API udostępnia 2 główne sposoby pobierania obiektów: metoda Search
(która korzysta z paginacji) i SearchStream
(która korzysta ze strumieniowania).
SearchStream
zapewnia lepszą wydajność niż Search
, ale w niektórych przypadkach preferowane jest Search
.
Więcej informacji o tych 2 metodach znajdziesz w przewodniku po raportach przesyłanych strumieniowo.
Używanie opcji ReadyToRun
.NET Core 3.1 dodaje obsługę wstępnej kompilacji plików binarnych na określoną platformę i architekturę przez ustawienie PublishReadyToRun
na true
, a następnie opublikowanie pliku binarnego przez określenie prawidłowego RuntimeIdentifier
podczas publikowania. Więcej informacji znajdziesz w przewodniku po funkcji ReadyToRun
.
Używanie TieredCompilation
TieredCompilation
umożliwia platformie .NET identyfikowanie obszarów o dużym obciążeniu i poprawianie wydajności. Kompilacja warstwowa lepiej współpracuje z opcją ReadyToRun
, ponieważ w razie potrzeby może używać wstępnie wygenerowanego obrazu. Więcej informacji znajdziesz w przewodniku na tematTieredCompilation
.
Dostosowywanie czyszczenia pamięci
Platforma .NET udostępnia 2 ogólne profile odśmiecania: profil stacji roboczej i profil serwera. Te 2 profile mają różne kompromisy dotyczące wydajności. Aplikacje korzystające z biblioteki Google Ads .NET zwykle działają lepiej, gdy są uruchamiane w profilu serwera. Możesz skorzystać z precyzyjnego dostrajania tych ustawień GC.
Odzyskiwanie pamięci na serwerze: odzyskiwanie pamięci na serwerze umożliwia środowisku wykonawczemu .NET zwiększenie wydajności aplikacji interfejsu Google Ads API przez działanie na wielu wątkach. Więcej informacji znajdziesz w tym przewodniku. Aby włączyć odśmiecanie serwera, dodaj te wiersze do pliku
.csproj
aplikacji.<PropertyGroup> <ServerGarbageCollection>true</ServerGarbageCollection> </PropertyGroup>
Równoczesne odśmiecanie pamięci: możesz włączyć równoczesne odśmiecanie pamięci, aby przydzielić 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. Możesz włączyć równoczesne odśmiecanie pamięci, dodając te wiersze do pliku
.csproj
aplikacji.<PropertyGroup> <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection> </PropertyGroup>
Zachowaj odzyskiwanie pamięci wirtualnej:
RetainVMGarbageCollection
ustawienie określa, czy segmenty pamięci wirtualnej, które powinny zostać usunięte, są umieszczane na liście rezerwowej do wykorzystania w przyszłości, czy też są zwalniane z powrotem do systemu operacyjnego. Aby włączyć przechowywanie pamięci wirtualnej, dodaj do aplikacji te wiersze:<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 .NET SDK.