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

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

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

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

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

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

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

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

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

В то время как GoogleAdsService.Search может отправлять несколько запросов с разбивкой на страницы для загрузки всего отчета, GoogleAdsService.SearchStream отправляет один запрос и инициирует постоянное соединение с API Google Рекламы независимо от размера отчета. Устранив время прохождения по сети туда и обратно, необходимое для запроса каждой отдельной страницы ответа Search , в зависимости от вашего приложения SearchStream может обеспечить более высокую производительность по сравнению с пейджингом. См. раздел «Поиск и 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);

Скомпилировать для релизной сборки

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

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

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

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

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

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

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

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

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

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

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

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

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

Используйте опцию ReadyToRun

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

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

TieredCompilation позволяет .NET выявлять «горячие точки» и повышать производительность. Многоуровневая компиляция лучше работает с опцией ReadyToRun , поскольку она может использовать предварительно созданный образ, если он доступен. Дополнительную информацию см. в руководстве по TieredCompilation .

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

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

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

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

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

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

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