Google Ads .NET 客户端库可简化应用与 Google Ads API 的互动,您只需进行最少的配置。不过,总体性能在很大程度上取决于库的使用方式以及与应用的集成方式。
本指南介绍了特定于 .NET 应用的性能优化,并补充了通常适用于 Google Ads API 的最佳实践。
尽可能重复使用 GoogleAdsClient
GoogleAdsClient
表示用户在进行 API 调用时的会话。它提供以下优化:
- 缓存 API 服务使用的 gRPC 通道。这样可以缩短首次进行 API 调用时的设置时间。
- 尽可能重用访问令牌。这样可以减少 Google Ads .NET 客户端库刷新访问令牌所需的往返次数。
尽可能使用经理级账号的访问令牌
- 如果您拥有在经理账号级别签发的访问令牌,则可以使用该令牌针对相应账号层次结构下的所有 Google Ads 客户账号进行 API 调用。与重复使用
GoogleAdsClient
实例相结合,这可以进一步减少客户端库为刷新访问令牌而必须执行的往返次数。
尽可能使用 SearchStream 而不是 Search
虽然 GoogleAdsService.Search
可以发送多个分页请求来下载整个报告,但 GoogleAdsService.SearchStream
会发送单个请求并与 Google Ads API 建立持久连接,无论报告大小如何。通过消除请求 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);
针对发布 build 进行编译
在部署到服务器时,请确保使用发布配置编译应用。使用调试配置时,应用会使用完整的符号调试信息进行编译,并且不会进行优化。
分析应用性能
对应用的 CPU 和内存使用情况进行性能分析,以找出性能瓶颈。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.V21.GoogleAdsService);
googleAdsService.SearchStream(request,
delegate (SearchGoogleAdsStreamResponse resp)
{
foreach (GoogleAdsRow googleAdsRow in resp.Results)
{
// Process the row.
}
}, callSettings
);
尽可能关闭日志记录功能
Google Ads .NET 库默认关闭日志记录,并使用延迟日志记录方法,从而提高应用性能。如果您开启了日志记录,请务必在生产环境中将其关闭。如果您需要在生产环境中监控特定失败的请求,可以执行以下一个或多个步骤,而不会对应用的性能产生不利影响:
- 仅开启摘要日志。
- 将完整日志设置为
ERROR
级别。 - 保存您感兴趣的特定请求的请求 ID,以便与支持渠道分享。
如需了解详情,请参阅日志记录指南。
决定是使用 SearchStream 方法还是 Search 方法
Google Ads API 提供两种主要的对象检索方式: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>
并发垃圾回收:您可以启用并发垃圾回收,以便为第 2 代中的垃圾回收提供 .NET GC 专用线程。 在处理大型报告时,此设置非常有用。您可以通过将以下几行代码添加到应用的
.csproj
文件中来启用并发垃圾回收。<PropertyGroup> <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection> </PropertyGroup>
保留虚拟机垃圾回收:
RetainVMGarbageCollection
设置用于配置应删除的虚拟内存段是放入备用列表以供日后使用,还是释放回操作系统 (OS)。您可以通过向应用添加以下代码行来开启虚拟内存保留。<PropertyGroup> <RetainVMGarbageCollection>true</RetainVMGarbageCollection> </PropertyGroup>
您可以选择介于工作站和服务器之间的设置,从而对 GC 进行微调。所有相关设置都在 .NET Core 应用的 runtimeconfig.json
文件、环境变量或 .NET SDK 应用的 App.config
中指定。