應用程式效能

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 建立持續連線,不受報表大小影響。SearchStream 可減少網路往返時間,因為您不需要再花時間來要求 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 提供診斷工具,可協助您分析應用程式。此外,您也可以使用其他商業分析工具

使用非同步方法

使用異步-等待模式的非同步程式設計可避免效能瓶頸,並提升應用程式的整體回應速度。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.V19.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 (使用串流)。

SearchStream 的效能優於 Search,但在某些情況下,建議使用 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>
    
  • 保留 VM 垃圾收集:RetainVMGarbageCollection 設定會設定應刪除的虛擬記憶體區段是否要放入待用清單供日後使用,或是釋回作業系統 (OS)。您可以在應用程式中新增下列程式行,開啟虛擬記憶體保留功能。

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

您可以透過工作站和伺服器之間的設定,微調 GC。所有相關設定都會在 .NET Core 應用程式的 runtimeconfig.json 檔案、環境變數或 .NET SDK 應用程式的 App.config 中指定。