Клиентская библиотека 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.
Отмена асинхронных методов
Вы можете использовать параметр 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.V17.GoogleAdsService);
googleAdsService.SearchStream(request,
delegate (SearchGoogleAdsStreamResponse resp)
{
foreach (GoogleAdsRow googleAdsRow in resp.Results)
{
// Process the row.
}
}, callSettings
);
Отключите ведение журнала, когда можете
Библиотека 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>
Вы можете точно настроить свой ГХ, остановившись на настройке между рабочей станцией и сервером. Все соответствующие параметры указаны в файле runtimeconfig.json
вашего приложения .NET Core, переменной среды или App.config
вашего приложения .NET SDK.