應用程式效能

Google Ads .NET 用戶端程式庫可簡化應用程式與 Google Ads API 的互動,而您需要進行最輕省的設定。不過,整體效能高度取決於程式庫的使用方式及與應用程式整合的方式。

本指南說明 .NET 應用程式專屬的效能最佳化措施,並參照 Google Ads API 通常適用的最佳做法

盡可能重複使用 GoogleAdsClient

GoogleAdsClient 代表使用者發出 API 呼叫時的工作階段。可提供下列最佳化功能:

  • 快取 API 服務使用的 gRPC 管道。這樣可以減少發出初始 API 呼叫時的設定時間。
  • 盡可能重複使用存取權杖。這樣可減少 Google Ads .NET 用戶端程式庫更新存取權杖時所需的來回行程次數。

盡可能使用管理員層級帳戶中的存取權杖

  • 如果您擁有在管理員帳戶層級核發的存取權杖,就能使用該權杖,對該帳戶階層下的所有 Google Ads 客戶帳戶進行 API 呼叫。與重複使用 GoogleAdsClient 執行個體搭配使用時,這可進一步減少用戶端程式庫重新整理存取權杖所需的來回行程次數。

盡可能使用 SearchStream (而非搜尋)

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

發布子版本的編譯

部署至伺服器時,請務必使用版本設定編譯應用程式。使用偵錯設定時,應用程式會以完整的符號偵錯資訊進行編譯,而且不會進行最佳化。

剖析應用程式效能

針對 CPU 和記憶體用量剖析應用程式,找出效能瓶頸。Visual Studio 提供診斷工具可協助您剖析應用程式。您也可以使用其他商用分析工具

使用非同步方法

使用 async-await 範例的非同步程式設計有助於避免效能瓶頸,並改善應用程式的整體回應速度。Google Ads .NET 程式庫為所有服務和 RPC 方法產生非同步方法。

盡可能關閉記錄功能

Google Ads .NET 程式庫預設會關閉記錄功能,並採用延遲記錄方法,提高應用程式效能。如果開啟記錄功能,請務必在實際工作環境中將其關閉。如果您需要監控實際工作環境中的特定失敗要求,您可以執行下列一或多項步驟,而不會影響應用程式效能:

  • 僅開啟摘要記錄。
  • 將完整記錄設為 ERROR 層級。
  • 請儲存特定興趣的要求 ID,以便與支援管道分享。

詳情請參閱記錄指南

決定要使用 SearchStream 還是搜尋方法

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>
    
  • 並行垃圾收集:您可以啟用並行垃圾收集功能,在第 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 中指定。