Производительность приложения

Клиентская библиотека Google Ads .NET упрощает взаимодействие вашего приложения с API Google Ads, требуя минимальной настройки с вашей стороны. Однако общая производительность во многом зависит от того, как библиотека используется и интегрирована с вашим приложением.

В этом руководстве рассматриваются вопросы оптимизации производительности, характерные для приложений .NET, и дополняются передовые практики , которые обычно применимы к API Google Ads.

Используйте GoogleAdsClient повторно, когда это возможно

GoogleAdsClient представляет сеанс пользователя при выполнении вызовов API. Он обеспечивает такие оптимизации, как:

  • Кэширование каналов gRPC , используемых службами API. Это сокращает время настройки при выполнении первоначальных вызовов API.
  • Повторное использование токенов доступа, когда это возможно. Это сокращает количество циклов обновления, которые клиентская библиотека Google Ads .NET должна выполнять для обновления токенов доступа.

По возможности используйте токены доступа из учетной записи уровня менеджера.

  • Если у вас есть токен доступа, выпущенный на уровне управляющего аккаунта, вы можете использовать его для выполнения вызовов API ко всем клиентским аккаунтам Google Рекламы в этой иерархии. В сочетании с повторным использованием экземпляров GoogleAdsClient это может дополнительно сократить количество циклов обновления токенов доступа, выполняемых клиентской библиотекой.

По возможности используйте SearchStream вместо Search

В то время как GoogleAdsService.Search может отправлять несколько постраничных запросов для загрузки всего отчёта, GoogleAdsService.SearchStream отправляет один запрос и инициирует постоянное соединение с API Google Ads независимо от размера отчёта. Устраняя время, затрачиваемое на передачу и передачу данных по сети, необходимое для запроса каждой отдельной страницы ответа Search , в зависимости от вашего приложения, SearchStream может обеспечить более высокую производительность по сравнению с постраничной выдачей. Подробнее об этой оптимизации см. в разделе Сравнение Search и SearchStream.

Управляйте обновлениями токенов доступа вручную

В некоторых средах, таких как Google Cloud Functions , повторное использование экземпляров GoogleAdsClient может быть нецелесообразным. В таких средах могут быть разработаны собственные рекомендации по сохранению и повторному использованию данных. В таких случаях вы можете расширить класс GoogleAdsConfig для самостоятельного обновления токенов доступа, как описано ниже.

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

Компиляция для релизной сборки

При развертывании на сервере обязательно скомпилируйте приложение с конфигурацией Release . При использовании конфигурации Debug приложение компилируется с полной символьной отладочной информацией и без оптимизации.

Профилируйте свое приложение

Профилируйте использование процессора и памяти в вашем приложении, чтобы выявить узкие места производительности. Visual Studio предоставляет инструменты диагностики для профилирования вашего приложения. Существуют также другие коммерческие инструменты профилирования .

Используйте асинхронные методы

Асинхронное программирование с использованием парадигмы async-await помогает избежать узких мест в производительности и повысить общую отзывчивость вашего приложения. Библиотека Google Ads .NET генерирует асинхронные методы для всех сервисов и методов RPC.

Отмена асинхронных методов

Параметр callSettings можно использовать для передачи CancellationToken асинхронным методам:

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

Отключайте ведение журнала, когда можете

Библиотека Google Ads .NET по умолчанию отключает ведение журнала и использует подход «ленивого» ведения журнала, что повышает производительность вашего приложения. Если вы включаете ведение журнала, убедитесь, что оно отключено в рабочей среде. Если вам нужно отслеживать конкретные запросы, вызывающие сбои, в рабочей среде, вы можете выполнить одно или несколько из следующих действий без ущерба для производительности вашего приложения:

  • Включите только сводные журналы.
  • Установите полные журналы на уровень ERROR .
  • Сохраните идентификатор запроса для конкретных интересующих вас запросов, которыми вы можете поделиться со службами поддержки.

Более подробную информацию см. в руководстве по ведению журнала .

Решите, какой метод использовать: SearchStream или Search.

API Google Ads предоставляет два основных способа извлечения объектов: метод Search (который использует пагинацию) и SearchStream (который использует потоковую передачу).

SearchStream обеспечивает лучшую производительность по сравнению с Search , но есть сценарии, когда Search предпочтительнее.

Более подробную информацию об этих двух методах см. в руководстве по потоковым отчетам .

Использовать опцию ReadyToRun

В .NET Core 3.1 добавлена поддержка предварительной компиляции двоичных файлов для конкретной платформы и архитектуры путем установки параметра PublishReadyToRun в true , а затем публикация двоичного файла путем указания допустимого идентификатора RuntimeIdentifier при публикации. Подробнее см. в руководстве по функции ReadyToRun .

Использовать многоуровневую компиляцию

TieredCompilation позволяет .NET выявлять проблемные места и повышать производительность. Многоуровневая компиляция лучше работает с опцией ReadyToRun , поскольку она позволяет использовать заранее сгенерированный образ (при его наличии). Подробнее см. в руководстве по TieredCompilation .

Тонкая настройка сборки мусора (GC)

.NET предоставляет два общих профиля для сборки мусора (GC): профиль рабочей станции и профиль сервера. Эти два профиля имеют разные компромиссы в плане производительности . Приложения, использующие библиотеку Google Ads .NET, как правило, работают лучше при работе в профиле сервера. Вы можете воспользоваться следующими настройками GC.

  • Сборка мусора на сервере: Сборка мусора на сервере позволяет среде выполнения .NET повысить производительность приложения Google Ads API за счёт работы в нескольких потоках. Подробнее см. в этом руководстве . Вы можете включить сборку мусора на сервере, добавив следующие строки в .csproj файл вашего приложения.

    <PropertyGroup>
      <ServerGarbageCollection>true</ServerGarbageCollection>
    </PropertyGroup>
    
  • Параллельная сборка мусора: вы можете включить параллельную сборку мусора , чтобы предоставить .NET GC отдельный поток для сборки мусора во втором поколении. Эта настройка может быть полезна при обработке отчётов большого размера. Вы можете включить параллельную сборку мусора, добавив следующие строки в файл .csproj вашего приложения.

    <PropertyGroup>
      <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection>
    </PropertyGroup>
    
  • Сохранение сбора мусора виртуальной памяти: параметр RetainVMGarbageCollection определяет, будут ли сегменты виртуальной памяти, подлежащие удалению, помещаться в резервный список для использования в будущем или возвращаться в операционную систему (ОС). Вы можете включить сохранение виртуальной памяти, добавив в своё приложение следующие строки.

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

Вы можете точно настроить сборщик мусора, выбрав конфигурацию, которая находится между рабочей станцией и сервером. Все необходимые параметры задаются в файле runtimeconfig.json вашего приложения .NET Core, переменной среды или App.config вашего приложения .NET SDK.