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

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

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

По возможности используйте GoogleAdsClient повторно.

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

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

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

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

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

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

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

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

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

В Google.Ads.GoogleAds v27.0.0 и более поздних версиях вы можете внедрить собственный предварительно настроенный экземпляр ICredential непосредственно в GoogleAdsConfig используя свойство Credentials , и отключить кэширование каналов ( UseChannelCache = false ).

Если вы предпочитаете инкапсулировать создание учетных данных в собственный класс конфигурации (или используете более раннюю версию библиотеки), вы можете расширить класс GoogleAdsConfig для выполнения собственного обновления токенов доступа следующим образом:

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

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

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

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

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

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

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

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

Параметр callSettings можно использовать для передачи CancellationToken асинхронным методам, таким как 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);

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

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

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

Для получения более подробной информации ознакомьтесь с руководством по ведению лесозаготовок .

Воспользуйтесь опцией ReadyToRun.

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

Используйте TieredCompilation

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

Оптимизируйте сборку мусора (GC).

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

Вы можете воспользоваться возможностью тонкой настройки следующих параметров сборщика мусора:

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

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

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

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

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