應用程式效能

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 比較」。

手動管理存取權杖更新

在某些環境 (例如 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);

編譯發布子版本

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

剖析應用程式效能

分析應用程式的 CPU 和記憶體用量,找出效能瓶頸。Visual Studio 提供診斷工具,可協助您分析應用程式。此外,還有其他商業分析工具可供使用。

使用非同步方法

使用 async-await 範例的非同步程式設計 有助於避免效能瓶頸,並提升應用程式的整體回應速度。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.V21.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>
    
  • 並行垃圾收集:您可以開啟並行垃圾收集,為第 2 代的 .NET GC 提供專屬執行緒,用於垃圾收集。處理大型報表時,這項設定會很有幫助。如要啟用並行垃圾收集,請在應用程式的 .csproj 檔案中加入下列程式碼。

    <PropertyGroup>
      <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection>
    </PropertyGroup>
    
  • 保留 VM 垃圾收集:RetainVMGarbageCollection設定會設定是否將應刪除的虛擬記憶體區段放在待命清單中以供日後使用,或是釋放回作業系統 (OS)。如要啟用虛擬記憶體保留功能,請在應用程式中加入下列程式行。

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

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