应用性能

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

Google Ads API 提供两种主要的对象检索方式:GoogleAdsService.Search(使用分页)和 GoogleAdsService.SearchStream(使用流式传输)。

虽然 Search 会发送多个分页请求来下载整个报告,但 SearchStream 只会发送一个请求,并与 Google Ads API 建立持久连接,而无论报告大小如何。通过消除请求 Search 响应的每个单独网页所需的往返网络时间,SearchStream 通常可以提供比分页更好的性能。如需详细了解何时选择每种方法,请参阅流式报告指南。

手动管理访问令牌刷新

在某些无状态环境中(例如 Google Cloud Functions),可能无法跨调用重复使用 GoogleAdsClient 实例。此类环境有自己的最佳实践来持久保存和重复使用数据。

在 Google.Ads.GoogleAds v27.0.0 及更高版本中,您可以使用 Credentials 属性直接在 GoogleAdsConfig 上注入预配置的 ICredential 实例,并停用渠道缓存 (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);

编译以生成发布 build

在部署到服务器时,请确保使用发布配置编译应用。使用调试配置时,您的应用会使用完整的符号调试信息进行编译,并且不会进行编译器优化。

分析应用性能

对应用的 CPU 和内存用量进行性能分析,以找出性能瓶颈。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 级别。
  • 保存特定失败请求的请求 ID,以便与支持渠道分享。

如需了解详情,请参阅日志记录指南。

使用 ReadyToRun 选项

新版 .NET 支持通过将 PublishReadyToRun 设置为 true,然后指定有效的 RuntimeIdentifier 来发布二进制文件,从而将二进制文件预编译到特定平台和架构。如需了解详情,请参阅ReadyToRun 部署指南。

使用 TieredCompilation

TieredCompilation(在 .NET 8 等新版 .NET 中默认处于启用状态)可让 .NET 识别热点并提升运行时性能。分层编译与 ReadyToRun 搭配使用效果很好,因为它可以利用预生成的映像快速启动,然后重新编译热方法并进行全面优化。如需了解详情,请参阅 TieredCompilation 指南。

微调垃圾回收 (GC)

.NET 为垃圾回收 (GC) 提供了两种常规配置文件:工作站配置文件和服务器配置文件。这两种配置在性能方面有不同的权衡取舍。使用 Google Ads .NET 库的专用服务器应用在服务器配置文件中运行时通常性能更好。

您可以微调以下 GC 设置,以从中获益:

  • 服务器垃圾回收:服务器垃圾回收功能可让 .NET 运行时通过在多个 GC 堆和线程上运行,为 Google Ads API 应用提供更高的吞吐量。如需了解详情,请参阅服务器 GC 指南。您可以通过将以下代码行添加到应用的 .csproj 文件中来开启服务器垃圾回收:

    <PropertyGroup>
      <ServerGarbageCollection>true</ServerGarbageCollection>
    </PropertyGroup>
    
  • 并发垃圾回收:您可以开启并发垃圾回收,以便为第 2 代中的垃圾回收提供专用线程。在处理大型报告时,此设置非常有用。您可以将以下代码行添加到应用的 .csproj 文件中,以开启并发垃圾回收:

    <PropertyGroup>
      <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection>
    </PropertyGroup>
    
  • 保留虚拟机垃圾回收:RetainVMGarbageCollection 设置用于配置应删除的虚拟内存段是放入待机列表以供日后使用,还是释放回操作系统 (OS)。您可以通过将以下代码行添加到应用的 .csproj 文件中来开启虚拟内存保留:

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

您可以选择平衡工作站和服务器行为的设置,从而对 GC 进行微调。您可以在 .NET 应用的 runtimeconfig.json 文件中、通过环境变量或在 App.config 中指定所有相关的 GC 设置。