Wydajność aplikacji

Biblioteka klienta Google Ads .NET upraszcza interakcje aplikacji z interfejsem Google Ads API przy minimalnej konfiguracji. Ogólna wydajność zależy jednak w dużej mierze od tego, jak biblioteka jest używana i zintegrowana z aplikacją.

W tym przewodniku opisujemy optymalizacje wydajności, które są specyficzne dla aplikacji .NET, i uzupełniamy sprawdzone metody, które mają zastosowanie do interfejsu Google Ads API.

W miarę możliwości używaj GoogleAdsClient

GoogleAdsClient reprezentuje sesję użytkownika podczas wywoływania interfejsu API. Umożliwia między innymi te optymalizacje:

  • 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 ponowne używanie 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 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 tej hierarchii kont. W połączeniu z ponownym używaniem instancji GoogleAdsClient może to dodatkowo zmniejszyć liczbę podróży w obie strony, które biblioteka klienta musi wykonać, aby odświeżyć tokeny dostępu.

W miarę możliwości używaj SearchStream zamiast Search

Chociaż GoogleAdsService.Search może wysyłać wiele żądań podzielonych na strony, aby pobrać cały raport, GoogleAdsService.SearchStream wysyła jedno żądanie i inicjuje trwałe połączenie z interfejsem Google Ads API niezależnie od rozmiaru raportu. Eliminując czas podróży w obie strony sieci wymagany do żądania każdej strony odpowiedzi Search, w zależności od aplikacji, SearchStream może oferować lepszą wydajność niż stronicowanie. Więcej informacji o tej optymalizacji znajdziesz w artykule Search a SearchStream.

Ręczne zarządzanie odświeżaniem tokenów dostępu

W niektórych środowiskach, np. w Google Cloud Functions, ponowne używanie GoogleAdsClient instancji może być niemożliwe. Takie środowiska mogą mieć własne sprawdzone metody utrwalania 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 na potrzeby kompilacji do publikacji

Podczas wdrażania na serwerze upewnij się, że kompilujesz aplikację za pomocą konfiguracji Release. W przypadku konfiguracji Debug aplikacja jest kompilowana z pełnymi informacjami o debugowaniu symbolicznym 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ą responsywność aplikacji. Biblioteka Google Ads .NET generuje metody asynchroniczne dla wszystkich usług i metod RPC.

Anulowanie metod asynchronicznych

Za pomocą parametru callSettings możesz przekazać 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.V25.GoogleAdsService);

googleAdsService.SearchStream(request,
    delegate (SearchGoogleAdsStreamResponse resp)
    {
        foreach (GoogleAdsRow googleAdsRow in resp.Results)
        {
            // Process the row.
        }
    }, callSettings
);

Wyłączanie rejestrowania

Biblioteka Google Ads .NET domyślnie wyłącza rejestrowanie i używa podejścia leniwego rejestrowania, co zwiększa wydajność aplikacji. Jeśli włączysz rejestrowanie, pamiętaj, aby wyłączyć je w środowisku produkcyjnym. Jeśli musisz monitorować konkretne żądania, które nie powiodły się w środowisku produkcyjnym, możesz wykonać co najmniej jeden z tych kroków bez negatywnego wpływu na wydajność aplikacji:

  • Włącz tylko dzienniki podsumowania.
  • Ustaw poziom pełnych dzienników na ERROR.
  • Zapisz identyfikator żądania w przypadku konkretnych żądań, które Cię interesują, aby móc je udostępnić w kanałach pomocy.

Więcej informacji znajdziesz w przewodniku dotyczącym rejestrowania.

Decydowanie, czy używać metody SearchStream czy Search

Interfejs Google Ads API udostępnia 2 główne sposoby pobierania obiektów: metodę Search (która używa stronicowania) i SearchStream (która używa strumieniowania).

SearchStream zapewnia lepszą wydajność niż Search, ale w niektórych przypadkach preferowana jest metoda Search.

Więcej informacji o tych 2 metodach znajdziesz w przewodniku dotyczącym raportów strumieniowych.

Używanie opcji ReadyToRun

.NET Core 3.1 dodaje obsługę wstępnego kompilowania plików binarnych na konkretną platformę i architekturę przez ustawienie PublishReadyToRun na true, a następnie opublikowanie pliku binarnego przez podanie prawidłowego RuntimeIdentifier podczas publikowania. Więcej informacji znajdziesz w przewodniku dotyczącym funkcji ReadyToRun.

Używanie TieredCompilation

TieredCompilation umożliwia .NET identyfikowanie hotspotów i zwiększanie wydajności. Kompilacja warstwowa działa lepiej z opcją ReadyToRun, ponieważ może używać wstępnie wygenerowanego obrazu, gdy jest on dostępny. Więcej informacji znajdziesz w guide on TieredCompilation.

Dostrajanie odśmiecania pamięci

.NET udostępnia 2 ogólne profile odśmiecania pamięci: 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 w profilu serwera. Możesz skorzystać z dostrajania tych ustawień odśmiecania pamięci.

Możesz dostroić odśmiecanie pamięci, wybierając konfigurację, która znajduje się 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 .NET SDK.