Hiệu suất của ứng dụng

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à dịch vụ API sử dụng. Việc 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 khứ hồi mà thư viện ứng dụng phải thực hiện để làm mới mã truy cập.

Sử dụng SearchStream thay vì Search bất cứ khi nào có thể

Google Ads API cung cấp hai cách chính để truy xuất đối tượng: GoogleAdsService.Search (sử dụng tính năng phân trang) và GoogleAdsService.SearchStream (sử dụng tính năng truyền 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 khứ hồ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 trực tuyến để tìm hiểu thêm về thời điểm 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 có trạng thái nhất định, chẳng hạn như Google Cloud Functions, bạn có thể không sử dụng lại được các thực thể GoogleAdsClient trong 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 trực tiếp thực thể ICredential đã định cấu hình sẵn của riêng mình vào GoogleAdsConfig bằng cách sử dụng thuộc tính Credentials và tắt tính năng lưu kênh vào bộ nhớ đệm (UseChannelCache = false).

Nếu muốn đóng gói việc tạo thông tin xác thực trong một lớp cấu hình tuỳ chỉnh (hoặc đang sử dụng phiên bản thư viện cũ hơn), bạn có thể mở rộng lớp GoogleAdsConfig để tự làm mới mã truy cập 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 bằng thông tin gỡ lỗi tượng trưng đầy đủ và không có tính nă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 phân tích ứng dụng của bạn. Ngoài ra, còn có các công cụ phân tích thương mại khác.

Sử dụng 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 tình trạng tắc nghẽn 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 .NET của Google Ads tạo 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ỷ phương thức không đồng bộ

Bạn có thể sử 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.V26.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 .NET của Google Ads 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ý từng phần để giúp ứng dụng của bạn hoạt động hiệu quả 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 phiên bản chính thức, bạn có thể thực hiện một hoặc nhiều bước sau đây mà không ảnh hưởng xấu đế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 đủ thành cấp ERROR.
  • Lưu mã yêu cầu cho các yêu cầu không thành công cụ thể để bạn có thể chia sẻ mã đó 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 tuỳ chọn ReadyToRun

.NET hiện đại hỗ trợ việc biên dịch trước tệp nhị phân cho một nền tảng và cấu trúc cụ thể bằng cách đặt PublishReadyToRun thành true, sau đó phát hành tệp nhị phân bằng cách chỉ định một RuntimeIdentifier hợp lệ. Hãy xem hướng dẫn triển khai ReadyToRun để 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 phát sóng và cải thiện hiệu suất trong thời gian chạy. Tính năng biên dịch theo tầng hoạt động hiệu quả với ReadyToRun vì có thể sử dụng hình ảnh được tạo sẵn để khởi động nhanh, sau đó biên dịch lại các phương thức nóng bằng cách tối ưu hoá hoàn toàn. 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 dọn rác (GC): hồ sơ máy trạm và hồ sơ máy chủ. Hai hồ sơ này có các mức đá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 .NET của Google Ads 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:

  • 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 ứng dụng Google Ads API bằng cách hoạt động trên nhiều luồng và vùng nhớ khối xếp GC. Hãy xem hướng dẫn về GC máy chủ để biết thêm thông tin. Bạn có thể bật tính năng dọn rác máy chủ bằng cách thêm các dòng sau vào tệp .csproj củ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 .NET GC một luồng chuyên dụng cho việc 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 .csproj của ứng dụng:

    <PropertyGroup>
      <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection>
    </PropertyGroup>
    
  • Giữ lại hoạt động dọn rác của máy ảo: Chế độ cài đặt RetainVMGarbageCollection định cấu hình xem các phân đoạn của bộ nhớ ảo cần xoá có được đưa vào danh sách chờ để sử dụng trong tương lai hay không, hoặc được giải phóng trở lại 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 .csproj củ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 giúp cân bằng hành vi của máy trạm và máy chủ. Bạn có thể chỉ định tất 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.