Клиентская библиотека 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.
В то время как GoogleAdsService.Search может отправлять несколько запросов с постраничной навигацией для загрузки всего отчета, GoogleAdsService.SearchStream отправляет один запрос и устанавливает постоянное соединение с API Google Ads независимо от размера отчета. В зависимости от вашего приложения, 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.V25.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
TieredCompilation позволяет .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определяет, будут ли сегменты виртуальной памяти, подлежащие удалению, помещаться в список ожидания для будущего использования или возвращаться в операционную систему (ОС). Вы можете включить сохранение виртуальной памяти, добавив следующие строки в ваше приложение.<PropertyGroup> <RetainVMGarbageCollection>true</RetainVMGarbageCollection> </PropertyGroup>
Вы можете точно настроить сборщик мусора, выбрав конфигурацию, находящуюся между рабочей станцией и сервером. Все необходимые параметры указываются в файле runtimeconfig.json вашего приложения .NET Core, в переменной среды или App.config вашего приложения .NET SDK.