应用性能

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 可能会比分页提供更好的性能,具体取决于 您的应用。如需详细了解此优化,请参阅 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);

针对发布 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.V25.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 选项搭配使用效果更好,因为它可以在可用时使用预生成的映像。如需了解详情,请参阅有关 guide on 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 中指定。