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.V19.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
(使用流式传输)。
与 Search
相比,SearchStream
可提供更好的性能,但在某些情况下,Search
是首选。
如需详细了解这两种方法,请参阅流式报告指南。
使用 ReadyToRun 选项
.NET Core 3.1 添加了对以下操作的支持:将 PublishReadyToRun
设置指定为 true
,以便将二进制文件预编译为特定平台和架构,然后在发布时指定有效的 RuntimeIdentifier
以发布二进制文件。如需了解详情,请参阅ReadyToRun
功能指南。
使用分层编译
TieredCompilation
可让 .NET 识别热点并提升性能。分层编译与 ReadyToRun
选项搭配使用效果更好,因为它可以在有可用预生成映像时使用该映像。如需了解详情,请参阅TieredCompilation
指南。
优化垃圾回收 (GC)
.NET 为垃圾回收 (GC) 提供了两个常规配置文件:工作站配置文件和服务器配置文件。这两种配置文件具有不同的性能权衡。使用 Google Ads .NET 库的应用在服务器配置文件中运行时,效果往往会更好。您可以通过微调以下 GC 设置来获益。
服务器垃圾回收:服务器垃圾回收功能支持 .NET 运行时在多个线程中运行,从而为 Google Ads API 应用提供更好的性能。如需了解详情,请参阅此指南。您可以将以下行添加到应用的
.csproj
文件中,以开启服务器垃圾回收。<PropertyGroup> <ServerGarbageCollection>true</ServerGarbageCollection> </PropertyGroup>
并发垃圾回收:您可以开启并发垃圾回收,为 .NET GC 提供专用于第 2 代垃圾回收的线程。在处理大型报告时,此设置会很有用。您可以将以下代码行添加到应用的
.csproj
文件中,从而启用并发垃圾回收。<PropertyGroup> <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection> </PropertyGroup>
保留虚拟机垃圾回收:
RetainVMGarbageCollection
设置用于配置应删除的虚拟内存段是放入待机列表以供日后使用,还是释放回操作系统 (OS)。您可以通过向应用添加以下代码行来启用虚拟内存保留功能。<PropertyGroup> <RetainVMGarbageCollection>true</RetainVMGarbageCollection> </PropertyGroup>
您可以通过采用介于工作站和服务器之间的设置来微调 GC。所有相关设置均在 .NET Core 应用的 runtimeconfig.json
文件、环境变量或 .NET SDK 应用的 App.config
中指定。