アプリケーションのパフォーマンス

Google 広告 .NET クライアント ライブラリを使用すると、デベロッパー側で行う設定を最小限に抑えつつ、アプリと Google Ads API とのやり取りを簡素化できます。ただし、全体的なパフォーマンスは、ライブラリの使用方法とアプリとの統合方法に大きく依存します。

このガイドでは、.NET アプリに固有のパフォーマンスの最適化について説明し、Google Ads API に一般的に適用されるベスト プラクティスを補完します。

可能な限り GoogleAdsClient を再利用する

GoogleAdsClient は、API 呼び出しを行うときのユーザーのセッションを表します。これにより、次のような最適化が可能になります。

  • API サービスで使用される gRPC チャネルをキャッシュに保存する。これにより、最初の API 呼び出しを行う際のセットアップ時間が短縮されます。
  • 可能であればアクセス トークンを再利用する。これにより、Google Ads .NET クライアント ライブラリがアクセス トークンを更新する際に行うラウンド トリップの回数を減らすことができます。

可能な場合は MCC アカウントのアクセス トークンを使用する

  • クライアント センター(MCC)アカウント レベルで発行されたアクセス トークンがある場合は、そのアクセス トークンを使用して、そのアカウント階層に含まれるすべての Google 広告クライアント アカウントに対して API 呼び出しを行うことができます。GoogleAdsClient インスタンスを再利用することで、クライアント ライブラリがアクセス トークンを更新するために行うラウンド トリップの数をさらに削減できます。

可能な限り Search ではなく SearchStream を使用する

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);

リリースビルド用にコンパイルする

サーバーにデプロイする際は、必ずリリース構成を使用してアプリをコンパイルしてください。デバッグ構成を使用すると、アプリは完全なシンボリック デバッグ情報でコンパイルされ、最適化は行われません。

アプリのプロファイリングを行う

CPU とメモリの両方の使用状況についてアプリをプロファイリングして、パフォーマンスのボトルネックを特定します。Visual Studio には、アプリのプロファイリングに役立つ診断ツールが用意されています。他にも、利用可能な商用プロファイリング ツールがあります。

非同期メソッドを使用する

async-await パラダイムを使用した非同期プログラミングを使用すると、パフォーマンスのボトルネックを回避し、アプリの全体的な応答性を向上させることができます。Google 広告の .NET ライブラリは、すべてのサービスと RPC メソッドに対して非同期メソッドを生成します。

可能であればロギングをオフにする

Google 広告 .NET ライブラリでは、デフォルトでロギングがオフになっており、遅延ロギングのアプローチが採用されているため、アプリのパフォーマンスが向上します。ロギングを有効にする場合は、本番環境では必ず無効にしてください。本番環境で特定の失敗したリクエストをモニタリングする必要がある場合は、アプリのパフォーマンスに悪影響を与えることなく、次のいずれかの手順を実施できます。

  • 概要ログのみをオンにします。
  • 完全なログを ERROR レベルに設定します。
  • サポート チャネルと共有できる、関心のある特定のリクエストのリクエスト ID を保存します。

詳しくは、ロギングガイドをご覧ください。

SearchStream と Search メソッドのどちらを使用するかを決定する

Google Ads API でオブジェクトを取得するには、主に Search メソッド(ページ分けを使用)と SearchStream(ストリーミングを使用)の 2 つの方法があります。

SearchStreamSearch よりもパフォーマンスが優れていますが、Search が推奨される場合もあります。

この 2 つの方法の詳細については、ストリーミング レポートのガイドをご覧ください。

ReadyToRun オプションを使用する

.NET Core 3.1 では、PublishReadyToRun 設定を true に指定してバイナリを特定のプラットフォームとアーキテクチャにプリコンパイルし、公開時に有効な RuntimeIdentifier を指定してバイナリを公開できるようになりました。詳しくは、ReadyToRun 機能に関するガイドをご覧ください。

TieredCompilation を使用する

TieredCompilation を使用すると、.NET がホットスポットを特定してパフォーマンスを改善できます。階層型コンパイルでは、事前に生成されたイメージを使用できる場合はそれを使用できるため、ReadyToRun オプションの使用が適切です。詳しくは、TieredCompilation のガイドをご覧ください。

ガベージ コレクション(GC)を微調整する

.NET には、ガベージ コレクション(GC)用の 2 つの一般的なプロファイル(ワークステーション プロファイルとサーバー プロファイル)が用意されています。これら 2 つのプロファイルでは、パフォーマンスのトレードオフが異なります。Google 広告 .NET ライブラリを使用するアプリは、サーバー プロファイルで実行すると成果が向上する傾向があります。以下の GC 設定を微調整するとメリットが得られます。

  • サーバー ガベージ コレクション: サーバー ガベージ コレクションを使用すると、.NET ランタイムは複数のスレッドで動作することで、Google Ads API アプリのパフォーマンスを向上させることができます。詳しくは、こちらのガイドをご覧ください。サーバーのガベージ コレクションを有効にするには、アプリの .csproj ファイルに次の行を追加します。

    <PropertyGroup>
      <ServerGarbageCollection>true</ServerGarbageCollection>
    </PropertyGroup>
    
  • 同時実行ガベージ コレクション: 同時実行ガベージ コレクションを有効にすると、第 2 世代のガベージ コレクション専用のスレッドを .NET GC に与えることができます。この設定は、サイズの大きなレポートを処理する場合に便利です。同時実行ガベージ コレクションを有効にするには、アプリの .csproj ファイルに次の行を追加します。

    <PropertyGroup>
      <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection>
    </PropertyGroup>
    
  • VM ガベージ コレクションを保持する: RetainVMGarbageCollection 設定は、削除する必要がある仮想メモリのセグメントを将来の使用のためにスタンバイ リストに追加するか、オペレーティング システム(OS)に解放するかを構成します。仮想メモリの保持を有効にするには、アプリに次の行を追加します。

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

GC を微調整するには、ワークステーションとサーバーの間でセットアップするようにします。関連する設定はすべて、.NET Core アプリの runtimeconfig.json ファイル、環境変数、または .NET SDK アプリの App.config で指定します。