Thư viện ứng dụng .NET của Google Ads giúp đơn giản hoá các lượt tương tác của ứng dụng bằng Google Ads API, với cấu hình tối thiểu từ phía bạn. Tuy nhiên, hiệu suất tổng thể phụ thuộc rất nhiều vào cách thư viện được sử dụng và tích hợp với ứng dụng của bạn.
Hướng dẫn này trình bày các phương pháp tối ưu hoá hiệu suất dành riêng cho ứng dụng .NET và bổ sung cho các phương pháp hay nhất thường áp dụng cho Google Ads API.
Sử dụng lại GoogleAdsClient bất cứ khi nào có thể
GoogleAdsClient đại diện cho phiên của người dùng khi thực hiện các lệnh gọi API. Nó cung cấp các điểm tối ưu hoá như:
- Lưu vào bộ nhớ đệm các kênh gRPC mà các dịch vụ API sử dụng. Điều này giúp giảm thời gian thiết lập khi thực hiện các lệnh gọi API ban đầu.
- Sử dụng lại mã truy cập khi có thể. Điều này giúp giảm số lượng trao đổi mà thư viện ứng dụng Google Ads .NET phải thực hiện để làm mới mã truy cập.
Sử dụng mã truy cập từ tài khoản cấp người quản lý khi có thể
Nếu có mã truy cập được cấp ở cấp tài khoản người quản lý, bạn có thể dùng mã này để thực hiện các lệnh gọi API đối với tất cả tài khoản khách hàng Google Ads trong hệ thống phân cấp tài khoản đó.
Khi kết hợp với việc sử dụng lại các phiên bản GoogleAdsClient, điều này có thể giảm thêm số lượng trao đổi mà thư viện ứng dụng phải thực hiện để làm mới mã truy cập.
Hãy sử dụng SearchStream thay vì Search bất cứ khi nào có thể
Google Ads API cung cấp 2 cách chính để truy xuất các đối tượng: GoogleAdsService.Search (sử dụng phân trang) và GoogleAdsService.SearchStream (sử dụng truyền phát trực tuyến).
Mặc dù Search gửi nhiều yêu cầu phân trang để tải toàn bộ báo cáo xuống, nhưng SearchStream sẽ gửi một yêu cầu duy nhất và bắt đầu một kết nối liên tục với Google Ads API bất kể kích thước báo cáo. Bằng cách loại bỏ thời gian mạng trao đổi cần thiết để yêu cầu từng trang riêng lẻ của phản hồi Search, SearchStream thường mang lại hiệu suất cao hơn so với phân trang. Hãy xem hướng dẫn về báo cáo phát trực tuyến để tìm hiểu thêm về thời điểm nên chọn từng phương thức.
Quản lý việc làm mới mã truy cập theo cách thủ công
Trong một số môi trường không trạng thái như Google Cloud Functions, bạn có thể không thể dùng lại các thực thể GoogleAdsClient trên các lệnh gọi.
Những môi trường như vậy có các phương pháp hay nhất riêng để duy trì và sử dụng lại dữ liệu.
Trong Google.Ads.GoogleAds v27.0.0 trở lên, bạn có thể chèn thực thể ICredential được định cấu hình sẵn của riêng mình trực tiếp trên GoogleAdsConfig bằng cách sử dụng thuộc tính Credentials và tắt tính năng lưu vào bộ nhớ đệm của kênh (UseChannelCache = false).
Nếu muốn đóng gói việc tạo thông tin đăng nhập trong một lớp cấu hình tuỳ chỉnh (hoặc đang sử dụng phiên bản cũ hơn của thư viện), bạn có thể mở rộng lớp GoogleAdsConfig để thực hiện các thao tác làm mới mã truy cập của riêng mình như sau:
// 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);
Biên dịch cho bản phát hành
Hãy nhớ biên dịch ứng dụng bằng Cấu hình phát hành khi triển khai lên máy chủ. Khi sử dụng cấu hình Gỡ lỗi, ứng dụng của bạn sẽ biên dịch với đầy đủ thông tin gỡ lỗi tượng trưng và không có các hoạt động tối ưu hoá trình biên dịch.
Lập hồ sơ ứng dụng
Phân tích ứng dụng của bạn về cả mức sử dụng CPU và bộ nhớ để xác định các điểm tắc nghẽn về hiệu suất. Visual Studio cung cấp Công cụ chẩn đoán để giúp bạn lập hồ sơ cho ứng dụng. Ngoài ra, còn có các công cụ lập hồ sơ thương mại khác.
Sử dụng các phương thức không đồng bộ
Lập trình không đồng bộ bằng cách sử dụng mô hình async-await giúp tránh các điểm tắc nghẽn về hiệu suất và nâng cao khả năng phản hồi tổng thể của ứng dụng. Thư viện Google Ads .NET tạo ra các phương thức không đồng bộ cho tất cả các dịch vụ và phương thức RPC.
Huỷ các phương thức không đồng bộ
Bạn có thể dùng tham số callSettings để truyền CancellationToken đến các phương thức không đồng bộ, chẳng hạn như 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);
Tắt tính năng ghi nhật ký khi có thể
Thư viện Google Ads .NET sẽ tắt tính năng ghi nhật ký theo mặc định và sử dụng phương pháp ghi nhật ký trì hoãn giúp ứng dụng của bạn có hiệu suất tốt hơn. Nếu bạn bật tính năng ghi nhật ký trong quá trình phát triển, hãy nhớ tắt tính năng này trong môi trường thực tế. Nếu cần theo dõi các yêu cầu cụ thể không thành công trong quá trình phát hành công khai, bạn có thể thực hiện một hoặc nhiều bước sau đây mà không ảnh hưởng tiêu cực đến hiệu suất của ứng dụng:
- Chỉ bật nhật ký tóm tắt.
- Đặt nhật ký đầy đủ ở cấp
ERROR. - Lưu mã yêu cầu cho các yêu cầu cụ thể không thành công để bạn có thể chia sẻ mã này với các kênh hỗ trợ.
Hãy xem hướng dẫn ghi nhật ký để tìm hiểu thêm.
Sử dụng lựa chọn ReadyToRun
.NET hiện đại hỗ trợ việc biên dịch trước các tệp nhị phân của bạn thành một nền tảng và cấu trúc cụ thể bằng cách đặt PublishReadyToRun thành true, sau đó xuất bản tệp nhị phân bằng cách chỉ định một RuntimeIdentifier hợp lệ. Hãy xem ReadyToRun hướng dẫn triển khai để tìm hiểu thêm.
Sử dụng TieredCompilation
TieredCompilation (được bật theo mặc định trong các phiên bản .NET hiện đại như .NET 8) cho phép .NET xác định các điểm truy cập và cải thiện hiệu suất trong thời gian chạy. Quá trình biên dịch theo cấp hoạt động hiệu quả với ReadyToRun vì có thể sử dụng hình ảnh được tạo trước để khởi động nhanh, sau đó biên dịch lại các phương thức nóng với khả năng tối ưu hoá đầy đủ.
Hãy xem hướng dẫn về TieredCompilation để tìm hiểu thêm.
Tinh chỉnh quy trình thu gom rác (GC)
.NET cung cấp hai hồ sơ chung cho việc thu gom rác (GC): hồ sơ máy trạm và hồ sơ máy chủ. Hai hồ sơ này có sự đánh đổi hiệu suất khác nhau. Các ứng dụng máy chủ chuyên dụng sử dụng thư viện Google Ads .NET thường hoạt động hiệu quả hơn khi chạy trong hồ sơ máy chủ.
Bạn có thể hưởng lợi từ việc tinh chỉnh các chế độ cài đặt GC sau đây:
Thu gom rác phía máy chủ: Tính năng thu gom rác phía máy chủ cho phép thời gian chạy .NET cung cấp thông lượng cao hơn cho một ứng dụng Google Ads API bằng cách hoạt động trên nhiều luồng và vùng nhớ heap GC. Hãy xem hướng dẫn về GC máy chủ để biết thêm thông tin chi tiết. Bạn có thể bật tính năng thu gom rác trên máy chủ bằng cách thêm các dòng sau vào tệp
.csprojcủa ứng dụng:<PropertyGroup> <ServerGarbageCollection>true</ServerGarbageCollection> </PropertyGroup>Thu gom rác đồng thời: Bạn có thể bật tính năng thu gom rác đồng thời để cung cấp cho GC .NET một luồng chuyên dụng để thu gom rác ở thế hệ 2. Chế độ cài đặt này có thể hữu ích khi xử lý các báo cáo lớn. Bạn có thể bật tính năng thu gom rác đồng thời bằng cách thêm các dòng sau vào tệp
.csprojcủa ứng dụng:<PropertyGroup> <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection> </PropertyGroup>Giữ lại quy trình thu gom rác của VM: Chế độ cài đặt
RetainVMGarbageCollectionđịnh cấu hình xem các phân đoạn bộ nhớ ảo cần xoá có được đưa vào danh sách chờ để sử dụng trong tương lai hay được trả lại cho hệ điều hành (OS). Bạn có thể bật tính năng giữ lại bộ nhớ ảo bằng cách thêm các dòng sau vào tệp.csprojcủa ứng dụng:<PropertyGroup> <RetainVMGarbageCollection>true</RetainVMGarbageCollection> </PropertyGroup>
Bạn có thể tinh chỉnh GC bằng cách chọn một chế độ thiết lập cân bằng giữa hành vi của máy trạm và máy chủ. Bạn có thể chỉ định tất cả các chế độ cài đặt GC có liên quan trong tệp runtimeconfig.json của ứng dụng .NET, thông qua các biến môi trường hoặc trong App.config.