Google 広告 .NET クライアント ライブラリを使用すると、アプリと Google Ads API のやり取りを簡素化できます。構成は最小限で済みます。ただし、全体的なパフォーマンスは、ライブラリの使用方法とアプリとの統合方法に大きく依存します。
このガイドでは、.NET アプリに固有のパフォーマンス最適化について説明します。また、Google Ads API に一般的に適用されるベスト プラクティスを補完します。
可能な限り GoogleAdsClient を再利用する
GoogleAdsClient は、API 呼び出しを行う際のユーザーのセッションを表します。次のような最適化が行われます。
- API サービスで使用される gRPC チャネルをキャッシュに保存する。これにより、最初の API 呼び出しを行う際のセットアップ時間が短縮されます。
- 可能な場合はアクセス トークンを再利用する。これにより、Google 広告 .NET クライアント ライブラリがアクセス トークンを更新するために実行する必要があるラウンドトリップの数が減ります。
可能な場合は、マネージャー レベルのアカウントのアクセス トークンを使用する
マネージャー アカウント レベルで発行されたアクセス トークンがある場合は、そのアカウント階層の下にあるすべての Google 広告クライアント アカウントに対して API 呼び出しを行うことができます。GoogleAdsClient インスタンスの再利用と組み合わせると、クライアント ライブラリがアクセス トークンを更新するために実行する必要がある往復の数をさらに減らすことができます。
可能な限り Search ではなく SearchStream を使用する
Google Ads API には、オブジェクトを取得する主な方法として、GoogleAdsService.Search(ページ分けを使用)と GoogleAdsService.SearchStream(ストリーミングを使用)の 2 つがあります。
Search は、レポート全体をダウンロードするために複数のページ分割されたリクエストを送信しますが、SearchStream は、レポートのサイズに関係なく、単一のリクエストを送信して Google Ads API との永続的な接続を開始します。SearchStream は、Search レスポンスの個々のページをリクエストするために必要な往復ネットワーク時間を排除することで、一般的にページングよりもパフォーマンスが向上します。各方法を選択するタイミングについては、ストリーミング レポート ガイドをご覧ください。
アクセス トークンの更新を手動で管理する
Google Cloud Functions などの特定のステートレス環境では、呼び出し間で GoogleAdsClient インスタンスを再利用できない場合があります。このような環境には、データを保持して再利用するための独自のベスト プラクティスがあります。
Google.Ads.GoogleAds v27.0.0 以降では、Credentials プロパティを使用して、事前構成済みの独自の ICredential インスタンスを GoogleAdsConfig に直接挿入し、チャネル キャッシュ(UseChannelCache = false)を無効にできます。
カスタム構成クラスで認証情報の作成をカプセル化する場合(または、以前のバージョンのライブラリを使用している場合)は、次のように GoogleAdsConfig クラスを拡張して独自のアクセス トークンの更新を実行できます。
// Create your own config class by extending the GoogleAdsConfig class.
class MyGoogleAdsConfig : GoogleAdsConfig
{
public MyGoogleAdsConfig() : base()
{
// Disable the library's built-in channel caching mechanism.
UseChannelCache = false;
}
protected override ICredential CreateCredentials()
{
// Create your own ICredential object here. You may refer to the
// default implementation of GoogleAdsConfig.CreateCredentials
// 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 メソッドに対して非同期メソッドを生成します。
非同期メソッドのキャンセル
callSettings パラメータを使用すると、CancellationToken を SearchStreamAsync などの非同期メソッドに渡すことができます。
using 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.V26.GoogleAdsService);
await googleAdsService.SearchStreamAsync(
request,
(SearchGoogleAdsStreamResponse resp) =>
{
foreach (GoogleAdsRow googleAdsRow in resp.Results)
{
// Process the row.
}
},
callSettings);
可能な場合はロギングをオフにする
Google 広告 .NET ライブラリでは、デフォルトでロギングがオフになっており、アプリのパフォーマンスを向上させる遅延ロギング アプローチが使用されます。開発中にロギングを有効にした場合は、本番環境で無効にしてください。本番環境で特定の失敗したリクエストをモニタリングする必要がある場合は、アプリのパフォーマンスに悪影響を与えることなく、次の手順を 1 つ以上実行できます。
- 概要ログのみを有効にします。
- 完全なログを
ERRORレベルに設定します。 - 失敗した特定のリクエストのリクエスト ID を保存して、サポート チャネルと共有できるようにします。
詳しくは、ロギングガイドをご覧ください。
ReadyToRun オプションを使用する
最新の .NET では、PublishReadyToRun を true に設定し、有効な RuntimeIdentifier を指定してバイナリを公開することで、特定のプラットフォームとアーキテクチャにバイナリをプリコンパイルできます。詳細については、ReadyToRun デプロイガイドをご覧ください。
TieredCompilation を使用する
TieredCompilation(.NET 8 などの最新の .NET バージョンではデフォルトで有効)を使用すると、.NET でホットスポットを特定し、ランタイム パフォーマンスを向上させることができます。階層型コンパイルは、事前に生成されたイメージを使用して高速起動し、完全な最適化でホットメソッドを再コンパイルできるため、ReadyToRun とうまく連携します。詳しくは、TieredCompilation ガイドをご覧ください。
ガベージ コレクション(GC)を微調整する
.NET には、ガベージ コレクション(GC)用の 2 つの一般的なプロファイル(ワークステーション プロファイルとサーバー プロファイル)が用意されています。これら 2 つのプロファイルには、パフォーマンスのトレードオフが異なります。Google 広告 .NET ライブラリを使用する専用サーバーアプリは、サーバー プロファイルで実行するとパフォーマンスが向上することがよくあります。
次の GC 設定を微調整すると、パフォーマンスが向上します。
サーバー ガベージ コレクション: サーバー ガベージ コレクションを使用すると、.NET ランタイムは複数の GC ヒープとスレッドを操作して、Google Ads API アプリのスループットを向上させることができます。詳細については、サーバー GC ガイドをご覧ください。サーバー ガベージ コレクションを有効にするには、アプリの
.csprojファイルに次の行を追加します。<PropertyGroup> <ServerGarbageCollection>true</ServerGarbageCollection> </PropertyGroup>同時実行ガベージ コレクション: 同時実行ガベージ コレクションを有効にすると、.NET GC に第 2 世代のガベージ コレクション専用のスレッドを割り当てることができます。この設定は、大規模なレポートを処理する場合に役立ちます。同時実行ガベージ コレクションを有効にするには、アプリの
.csprojファイルに次の行を追加します。<PropertyGroup> <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection> </PropertyGroup>VM ガベージ コレクションを保持する:
RetainVMGarbageCollection設定では、削除する必要がある仮想メモリのセグメントを将来の使用のためにスタンバイ リストに配置するか、オペレーティング システム(OS)に解放するかを構成します。仮想メモリの保持を有効にするには、アプリの.csprojファイルに次の行を追加します。<PropertyGroup> <RetainVMGarbageCollection>true</RetainVMGarbageCollection> </PropertyGroup>
ワークステーションとサーバーの動作のバランスを取る設定を選択することで、GC を微調整できます。関連する GC 設定はすべて、.NET アプリの runtimeconfig.json ファイル、環境変数、または App.config で指定できます。