应用性能

<ph type="x-smartling-placeholder">

Google Ads .NET 客户端库可简化应用与 Google Ads API,只需极少量的配置即可。不过, 该库在很大程度上取决于其使用方式以及与 应用。

本指南介绍了 .NET 应用特有的性能优化,以及 补充了最佳 普遍适用的标准做法 Google Ads API。

尽可能重复使用 GoogleAdsClient

GoogleAdsClient 表示进行 API 调用时的用户会话。它提供 优化措施,例如:

  • 缓存 gRPC 渠道 API 服务所用的资源这可以缩短创建初始 API 时的设置时间 调用。
  • 尽可能重复使用访问令牌。这样可以减少往返次数 Google Ads .NET 客户端库要刷新访问令牌所必须执行的步骤。

尽可能使用经理账号中的访问令牌

  • 如果您有在经理账号级别发放的访问令牌,则可以使用该令牌 针对该账号下的所有 Google Ads 客户账号进行 API 调用 层级结构。结合重复使用 GoogleAdsClient 实例,这可以 进一步减少客户端库必须执行的往返次数 刷新访问令牌。

尽可能使用 SearchStream 而非 Search

GoogleAdsService.Search 可以 发送多个分页请求以下载整个报告; GoogleAdsService.SearchStream 发送一个请求并与 Google Ads API 建立持久连接 无论报表大小如何消除了往返网络时间 需要请求 Search 响应的每个单独页面,具体取决于 与分页相比,SearchStream 可能会提供更高的性能。请参阅 搜索网络与 SearchStream 进行学习 有关此优化的更多信息。

手动管理访问令牌刷新

在某些环境(例如 Google Cloud 函数,那么重复使用这些函数可能无法 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 进行编译

务必使用 Release 功能编译应用 配置 需要注意的一点是使用调试配置时,您的应用 使用完整的符号调试信息编译,并且不进行优化。

分析应用性能

分析应用的 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.V17.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

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>
    

通过设置介于 80 到 480 毫秒 工作站和服务器所有相关的 设置 会在 .NET Core 应用的 runtimeconfig.json 文件中指定,此文件是一个环境 变量或 .NET SDK 应用的 App.config