Wydajność aplikacji

Biblioteka klienta Google Ads .NET upraszcza interakcje aplikacji z interfejsem Google Ads API przy minimalnej konfiguracji z Twojej strony. 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 ponownie używaj obiektu GoogleAdsClient

GoogleAdsClient reprezentuje sesję użytkownika podczas wykonywania wywołań 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żywaj tokenów dostępu. Zmniejsza to liczbę rund, 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 tej hierarchii kont. W połączeniu z ponownym używaniem 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

Interfejs Google Ads API udostępnia 2 główne sposoby pobierania obiektów:GoogleAdsService.Search (który korzysta z paginacji) i GoogleAdsService.SearchStream (który korzysta ze strumieniowania).

Search wysyła wiele żądań podzielonych na strony, aby pobrać cały raport, a 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 sieciowego i otrzymanie odpowiedzi dla każdej strony odpowiedzi Search,SearchStream zwykle zapewnia lepszą wydajność niż stronicowanie. Więcej informacji o tym, kiedy wybrać poszczególne metody, znajdziesz w przewodniku po raportach o strumieniowaniu.

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

W niektórych środowiskach bezstanowych, takich jak Google Cloud Functions, ponowne użycie instancji GoogleAdsClient w różnych wywołaniach może być niemożliwe. W takich środowiskach obowiązują własne sprawdzone metody przechowywania i ponownego wykorzystywania danych.

W Google.Ads.GoogleAds v27.0.0 i nowszych wersjach możesz wstrzyknąć własną wstępnie skonfigurowaną instancję ICredential bezpośrednio w GoogleAdsConfig za pomocą właściwości Credentials i wyłączyć buforowanie kanału (UseChannelCache = false).

Jeśli wolisz umieścić 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 kompilacji do publikacji

Podczas wdrażania aplikacji na serwerze pamiętaj, aby skompilować ją za pomocą konfiguracji wersji. W przypadku konfiguracji debugowania aplikacja jest kompilowana z pełnymi symbolicznymi informacjami debugowania i bez optymalizacji kompilatora.

Profilowanie aplikacji

Profiluj aplikację pod kątem wykorzystania procesora i pamięci, aby identyfikować 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ł 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ć 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.V25.GoogleAdsService);

await googleAdsService.SearchStreamAsync(
    request,
    (SearchGoogleAdsStreamResponse resp) =>
    {
        foreach (GoogleAdsRow googleAdsRow in resp.Results)
        {
            // Process the row.
        }
    },
    callSettings);

Wyłączaj rejestrowanie, gdy to możliwe

Biblioteka Google Ads .NET domyślnie wyłącza rejestrowanie i stosuje podejście leniwego rejestrowania, które zwiększa wydajność aplikacji. Jeśli włączysz rejestrowanie podczas programowania, pamiętaj, aby wyłączyć je w środowisku produkcyjnym. Jeśli chcesz monitorować konkretne nieudane żądania w środowisku produkcyjnym, możesz wykonać co najmniej jedną z tych czynności bez negatywnego wpływu na wydajność aplikacji:

  • Włącz tylko dzienniki podsumowania.
  • Ustaw pełne logi na poziomie ERROR.
  • Zapisz identyfikator żądania w przypadku konkretnych żądań, które się nie powiodły, aby móc go udostępnić kanałom pomocy.

Więcej informacji znajdziesz w przewodniku po rejestrowaniu.

Używanie opcji ReadyToRun

Nowoczesna platforma .NET obsługuje wstępną kompilację plików binarnych na określoną platformę i architekturę przez ustawienie wartości PublishReadyToRun na true, a następnie publikowanie pliku binarnego przez podanie prawidłowej wartości RuntimeIdentifier. Więcej informacji znajdziesz w ReadyToRunprzewodniku po wdrażaniu.

Używanie TieredCompilation

TieredCompilation (domyślnie włączone w nowoczesnych wersjach .NET, takich jak .NET 8) pozwala .NET identyfikować hotspoty i poprawiać wydajność środowiska wykonawczego. Kompilacja warstwowa dobrze współpracuje z ReadyToRun, ponieważ może używać wstępnie wygenerowanego obrazu do szybkiego uruchamiania, a następnie ponownie kompilować często używane metody z pełną optymalizacją. Więcej informacji znajdziesz w TieredCompilationprzewodniku.

Dostosowywanie odśmiecania pamięci

Platforma .NET udostępnia 2 ogólne profile odśmiecania pamięci (GC): profil stacji roboczej i profil serwera. Te 2 profile mają różne kompromisy dotyczące wydajności. Aplikacje na serwerze dedykowanym korzystające z biblioteki Google Ads .NET często działają lepiej, gdy są uruchamiane w profilu serwera.

Możesz skorzystać z dostosowania tych ustawień GC:

  • Odśmiecanie pamięci po stronie serwera: Odśmiecanie pamięci po stronie serwera umożliwia środowisku wykonawczemu .NET zwiększenie przepustowości aplikacji interfejsu Google Ads API przez działanie na wielu stertach i wątkach odśmiecania pamięci. Więcej informacji znajdziesz w przewodniku po odśmiecaniu serwera. Aby włączyć odśmiecanie pamięci serwera, dodaj te wiersze do pliku .csproj aplikacji:

    <PropertyGroup>
      <ServerGarbageCollection>true</ServerGarbageCollection>
    </PropertyGroup>
    
  • Równoległe odśmiecanie pamięci: możesz włączyć równoległe 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. Aby włączyć równoczesne odśmiecanie, dodaj te wiersze do pliku .csproj aplikacji:

    <PropertyGroup>
      <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection>
    </PropertyGroup>
    
  • Zachowaj odśmiecanie maszyny wirtualnej: ustawienie RetainVMGarbageCollection 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ć utrzymywanie pamięci wirtualnej, dodaj te wiersze do pliku .csproj aplikacji:

    <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.