Wydajność aplikacji

Biblioteka klienta .NET Google Ads upraszcza interakcje w Twojej aplikacji z interfejsem Google Ads API. Ogólna wydajność zależy jednak od sposobu używania biblioteki i integracji z aplikacją.

Ten przewodnik zawiera informacje o optymalizacji skuteczności aplikacji .NET i jest uzupełnieniem sprawdzonych metod dotyczących interfejsu Google Ads API.

Zawsze, gdy to możliwe, używaj GoogleAdsClient ponownie

GoogleAdsClient reprezentuje sesję użytkownika podczas wykonywania wywołań interfejsu API. Oferuje optymalizacje, takie jak:

  • Buforowanie kanałów gRPC używanych przez usługi interfejsu API. Skraca to czas konfiguracji podczas wstępnych wywołań interfejsu API.
  • W miarę możliwości używaj ponownie tokenów dostępu. Zmniejsza to liczbę transferów 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 wystawiony na poziomie konta menedżera, możesz go używać do wywoływania interfejsu API dla wszystkich kont klientów Google Ads należących do tej hierarchii konta. W połączeniu z ponownym wykorzystaniem instancji GoogleAdsClient może to jeszcze zmniejszyć liczbę transferów w obie strony, które biblioteka klienta musi wykonywać, aby odświeżyć tokeny dostępu.

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

GoogleAdsService.Search może wysyłać wiele podzielonych na strony żądań pobrania całego raportu, a GoogleAdsService.SearchStream wysyła 1 żądanie i inicjuje trwałe połączenie z interfejsem Google Ads API niezależnie od wielkości raportu. Wyeliminując czas przesyłania danych w obie strony wymagany do żądania każdej strony w odpowiedzi Search (w zależności od aplikacji), SearchStream może poprawić wydajność względem stronicowania. Więcej informacji na temat optymalizacji znajdziesz w sekcji Wyszukiwarka a SearchStream.

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

W niektórych środowiskach, takich jak funkcje w Google Cloud Functions, ponowne używanie instancji GoogleAdsClient może nie być możliwe. Takie środowiska mogą mieć własne sprawdzone metody utrzymywania i ponownego wykorzystywania danych. W takich przypadkach możesz rozszerzyć klasę GoogleAdsConfig na takie, które przeprowadzają własne odświeżanie tokenów dostępu.

// 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);

Kompilacja do kompilacji wersji

Pamiętaj, aby podczas wdrażania aplikacji na serwerze skompilować ją za pomocą konfiguracji wersji. W przypadku korzystania z konfiguracji debugowania aplikacja kompiluje się z pełnymi symbolicznymi informacjami debugowania bez optymalizacji.

Profilowanie aplikacji

Profiluj aplikację pod kątem wykorzystania procesora i pamięci, aby zidentyfikować słabe gardła wydajności. Visual Studio udostępnia narzędzia diagnostyczne, które ułatwiają profilowanie aplikacji. Dostępne są też inne komercyjne narzędzia do profilowania.

Używanie metod asynchronicznych

Programowanie asynchroniczne korzystające z paradygmatu asynchronicznego pomaga uniknąć wąskiego gardła wydajności i zwiększyć ogólną elastyczność aplikacji. Biblioteka .NET Google Ads generuje metody asynchroniczne dla wszystkich usług i metod RPC.

Jeśli to możliwe, wyłącz logowanie

Biblioteka .NET Google Ads domyślnie wyłącza logowanie i korzysta z leniwego logowania, co zwiększa wydajność aplikacji. Jeśli włączasz logowanie, pamiętaj, aby je wyłączyć 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 dzienniki podsumowania.
  • Ustaw pełne logi na poziom: ERROR.
  • Zapisz identyfikatory konkretnych próśb, które możesz udostępniać kanałom pomocy.

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

Wybór metody: SearchStream czy wyszukiwania

Interfejs Google Ads API udostępnia 2 główne sposoby pobierania obiektów: metodę Search (korzystającą z podziału na strony) i SearchStream (korzystającą z strumieniowego przesyłania danych).

Opcja SearchStream zapewnia większą skuteczność w przypadku ponad Search, ale są sytuacje, w których preferowana jest zasada Search.

Więcej informacji o tych 2 metodach znajdziesz w przewodniku po raportach strumieniowanych.

Użyj opcji Gotowe do uruchomienia

.NET Core 3.1 umożliwia wstępne kompilowanie plików binarnych pod kątem określonej platformy i architektury. Aby to zrobić, określ ustawienie PublishReadyToRun na true, a następnie opublikuj plik binarny przez określenie prawidłowego atrybutu RuntimeIdentifier podczas publikowania. Aby dowiedzieć się więcej, przeczytaj przewodnik po funkcji ReadyToRun.

Użyj TieredCompilation

TieredCompilation umożliwia .NET identyfikowanie hotspotów i zwiększenie jego 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 przewodniku po TieredCompilation.

Dostosowywanie czyszczenia pamięci (GC)

.NET udostępnia 2 ogólne profile czyszczenia pamięci (GC): profil stacji roboczej i profil serwera. Te 2 profile mają różnice w stosunku do skuteczności. Aplikacje korzystające z biblioteki .NET Google Ads zwykle są skuteczniejsze, gdy działają w profilu serwera. Możesz skorzystać z dostrajania poniższych ustawień GC.

  • Czyszczenie pamięci serwera: funkcja czyszczenia serwera pozwala w czasie działania .NET na zapewnienie lepszej wydajności aplikacji korzystającej z interfejsu Google Ads API dzięki operacjom w wielu wątkach. Więcej informacji znajdziesz w tym przewodniku. Czyszczenie pamięci serwera możesz włączyć, dodając te wiersze do pliku .csproj aplikacji.

    <PropertyGroup>
      <ServerGarbageCollection>true</ServerGarbageCollection>
    </PropertyGroup>
    
  • Równoczesne odśmiecanie pamięci: możesz włączyć równoczesne czyszczenie pamięci, aby w 2 generacji utworzyć dla .NET GC specjalny wątek do czyszczenia pamięci. To ustawienie może być przydatne podczas przetwarzania raportów o dużych rozmiarach. Możesz włączyć równoczesne odśmiecanie, dodając następujące wiersze do pliku .csproj aplikacji.

    <PropertyGroup>
      <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection>
    </PropertyGroup>
    
  • Zachowaj czyszczenie pamięci maszyny wirtualnej: ustawienie RetainVMGarbageCollection określa, czy segmenty pamięci wirtualnej, które powinny zostać usunięte, mają być umieszczane na liście gotowości do wykorzystania w przyszłości, czy też są udostępniane z powrotem do systemu operacyjnego. Możesz włączyć przechowywanie pamięci wirtualnej, dodając do aplikacji te wiersze.

    <PropertyGroup>
      <RetainVMGarbageCollection>true</RetainVMGarbageCollection>
    </PropertyGroup>
    

Możesz dostosować GC, wybierając konfigurację łączącą stację roboczą z serwerem. Wszystkie odpowiednie ustawienia są określone w pliku runtimeconfig.json aplikacji .NET Core, zmiennej środowiskowej lub App.config aplikacji .NET SDK.