应用性能

您只需完成极少量的配置,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 进行编译

在将应用部署到服务器时,请确保使用版本配置编译您的应用。使用 Debug 配置时,您的应用在编译时会提供完整的符号调试信息,并且未进行任何优化。

分析应用性能

分析应用的 CPU 和内存使用情况,找出性能瓶颈。Visual Studio 提供了诊断工具来帮助您分析应用性能。此外,您也可以使用其他商业性能剖析工具

使用异步方法

使用 async-await 范式的异步编程有助于避免性能瓶颈并提高应用的整体响应能力。Google Ads .NET 库会为所有服务和 RPC 方法生成异步方法。

尽可能关闭日志记录功能

默认情况下,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 库的应用在服务器配置文件中运行时往往性能更好。微调以下 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 中指定。