應用程式效能

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

Google Ads API 提供兩種主要方式來擷取物件:GoogleAdsService.Search (使用分頁) 和 GoogleAdsService.SearchStream (使用串流)。

Search 會傳送多個分頁要求來下載整份報表,而 SearchStream 則會傳送單一要求,並與 Google Ads API 建立永久連線,無論報表大小為何。SearchStream 消除要求 Search 回應中每個個別頁面所需的來回網路時間,因此效能通常比分頁更佳。如要進一步瞭解何時該選擇哪種方法,請參閱串流報表指南。

手動管理存取權杖更新

在某些無狀態環境 (例如 Google Cloud Functions) 中,可能無法在叫用之間重複使用 GoogleAdsClient 執行個體。這類環境有各自的最佳做法,可保留及重複使用資料。

在 Google.Ads.GoogleAds v27.0.0 以上版本中,您可以使用 Credentials 屬性,直接在 GoogleAdsConfig 上插入預先設定的 ICredential 執行個體,並停用管道快取 (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 Ads .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 Ads .NET 程式庫預設會關閉記錄功能,並採用延遲記錄方法,提升應用程式效能。如果在開發期間啟用記錄功能,請務必在正式環境中關閉。如需監控正式環境中失敗的特定要求,您可以採取下列一或多個步驟,而不會對應用程式效能造成負面影響:

  • 僅啟用摘要記錄。
  • 將完整記錄設為 ERROR 層級。
  • 請儲存特定失敗要求的 ID,以便提供給支援管道。

詳情請參閱記錄指南。

使用 ReadyToRun 選項

現代 .NET 支援將二進位檔預先編譯至特定平台和架構,方法是將 PublishReadyToRun 設為 true,然後指定有效的 RuntimeIdentifier 來發布二進位檔。詳情請參閱 ReadyToRun 部署指南。

使用 TieredCompilation

TieredCompilation (.NET 8 等新版 .NET 預設啟用) 可讓 .NET 找出熱點並提升執行階段效能。分層編譯與 ReadyToRun 搭配得很好,因為它可以使用預先產生的映像檔快速啟動,然後重新編譯熱門方法,並進行完整最佳化。詳情請參閱 TieredCompilation 指南。

微調垃圾收集 (GC)

.NET 提供兩種垃圾收集 (GC) 的一般設定檔:工作站設定檔和伺服器設定檔。這兩種設定檔在效能方面各有優缺點。使用 Google Ads .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 中指定。