应用性能

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 方法生成异步方法。

请尽可能停用日志记录

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

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 中指定。