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 建立持續連線,不受報表大小影響。Search可消除要求 SearchStream 回應中每個個別頁面所需的往返網路時間,因此通常比分頁功能更有效率。如要進一步瞭解何時該選擇哪種方法,請參閱串流報表指南。
手動管理存取權杖更新
在某些無狀態環境 (例如 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);
編譯發布子版本
部署至伺服器時,請務必使用發布設定編譯應用程式。使用「Debug」設定時,應用程式會編譯完整的符號偵錯資訊,且不會進行編譯器最佳化。
剖析應用程式效能
分析應用程式的 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.V25.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 執行階段在多個垃圾收集堆積和執行緒上運作,進而為 Google Ads API 應用程式提供更高的處理量。詳情請參閱伺服器 GC 指南。如要開啟伺服器垃圾回收功能,請在應用程式的
.csproj檔案中新增下列程式碼:<PropertyGroup> <ServerGarbageCollection>true</ServerGarbageCollection> </PropertyGroup>並行垃圾回收:您可以開啟並行垃圾回收,為第 2 代的 .NET GC 提供專屬執行緒,以進行垃圾回收。處理大型報表時,這項設定會很有幫助。如要啟用並行垃圾收集,請在應用程式的
.csproj檔案中加入下列程式碼:<PropertyGroup> <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection> </PropertyGroup>保留 VM 垃圾回收:
RetainVMGarbageCollection設定會設定是否將應刪除的虛擬記憶體區段放在待命清單中以供日後使用,或是釋放回作業系統 (OS)。如要啟用虛擬記憶體保留功能,請在應用程式的.csproj檔案中新增下列程式碼:<PropertyGroup> <RetainVMGarbageCollection>true</RetainVMGarbageCollection> </PropertyGroup>
您可以選擇兼顧工作站和伺服器行為的設定,微調垃圾收集作業。所有相關的 GC 設定都可以在 .NET 應用程式的 runtimeconfig.json 檔案中指定,也可以透過環境變數或在 App.config 中指定。