Performa aplikasi

Library klien .NET Google Ads menyederhanakan interaksi aplikasi Anda dengan Google Ads API, dengan konfigurasi minimal dari pihak Anda. Namun, performa keseluruhan sangat bergantung pada cara penggunaan dan integrasi library dengan aplikasi Anda.

Panduan ini mencakup pengoptimalan performa yang khusus untuk aplikasi .NET, dan melengkapi praktik terbaik yang umumnya berlaku untuk Google Ads API.

Gunakan kembali GoogleAdsClient jika memungkinkan

GoogleAdsClient mewakili sesi pengguna saat melakukan panggilan API. Layanan ini memberikan pengoptimalan seperti:

  • Meng-cache channel gRPC yang digunakan oleh layanan API. Hal ini mengurangi waktu penyiapan saat melakukan panggilan API awal.
  • Menggunakan kembali token akses jika memungkinkan. Tindakan ini mengurangi jumlah perjalanan pulang pergi yang harus dilakukan oleh library klien .NET Google Ads untuk memperbarui token akses.

Gunakan token akses dari akun tingkat pengelola jika memungkinkan

Jika memiliki token akses yang dikeluarkan di tingkat akun pengelola, Anda dapat menggunakannya untuk membuat panggilan API terhadap semua akun klien Google Ads dalam hierarki akun tersebut. Jika digabungkan dengan penggunaan kembali instance GoogleAdsClient, hal ini dapat lebih mengurangi jumlah perjalanan pulang pergi yang harus dilakukan library klien untuk memperbarui token akses.

Gunakan SearchStream, bukan Penelusuran, jika memungkinkan

Google Ads API menyediakan dua cara utama untuk mengambil objek: GoogleAdsService.Search (yang menggunakan penomoran halaman) dan GoogleAdsService.SearchStream (yang menggunakan streaming).

Meskipun Search mengirim beberapa permintaan yang dipaginasi untuk mendownload seluruh laporan, SearchStream mengirim satu permintaan dan memulai koneksi persisten dengan Google Ads API, terlepas dari ukuran laporan. Dengan menghilangkan waktu perjalanan pulang pergi jaringan yang diperlukan untuk meminta setiap halaman respons Search, SearchStream umumnya menawarkan performa yang lebih baik daripada penomoran halaman. Lihat panduan laporan streaming untuk mempelajari lebih lanjut waktu yang tepat untuk memilih setiap metode.

Mengelola refresh token akses secara manual

Di lingkungan stateless tertentu seperti Google Cloud Functions, mungkin tidak memungkinkan untuk menggunakan kembali instance GoogleAdsClient di seluruh pemanggilan. Lingkungan tersebut memiliki praktik terbaiknya sendiri untuk mempertahankan dan menggunakan kembali data.

Di Google.Ads.GoogleAds v27.0.0 dan yang lebih baru, Anda dapat menyuntikkan instance ICredential yang telah dikonfigurasi sebelumnya langsung di GoogleAdsConfig menggunakan properti Credentials dan menonaktifkan penyimpanan dalam cache channel (UseChannelCache = false).

Jika Anda lebih memilih untuk mengenkapsulasi pembuatan kredensial dalam class konfigurasi kustom (atau menggunakan versi library yang lebih lama), Anda dapat memperluas class GoogleAdsConfig untuk melakukan penggantian token akses Anda sendiri sebagai berikut:

// 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);

Mengompilasi untuk build rilis

Pastikan Anda mengompilasi aplikasi menggunakan konfigurasi Rilis saat men-deploy ke server. Saat menggunakan konfigurasi Debug, aplikasi Anda dikompilasi dengan informasi debug simbolik lengkap dan tanpa pengoptimalan compiler.

Membuat profil aplikasi Anda

Buat profil aplikasi Anda untuk penggunaan CPU dan memori guna mengidentifikasi hambatan performa. Visual Studio menyediakan Alat diagnostik untuk membantu membuat profil aplikasi Anda. Ada juga alat pembuatan profil komersial lainnya yang tersedia.

Menggunakan metode asinkron

Pemrograman asinkron menggunakan paradigma async-await membantu menghindari hambatan performa dan meningkatkan responsivitas aplikasi Anda secara keseluruhan. Library .NET Google Ads menghasilkan metode asinkron untuk semua layanan dan metode RPC.

Pembatalan metode asinkron

Anda dapat menggunakan parameter callSettings untuk meneruskan CancellationToken ke metode asinkron seperti 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);

Nonaktifkan logging jika memungkinkan

Library .NET Google Ads menonaktifkan logging secara default dan menggunakan pendekatan logging lambat yang memberikan performa yang lebih baik untuk aplikasi Anda. Jika Anda mengaktifkan logging selama pengembangan, pastikan Anda menonaktifkannya di lingkungan produksi. Jika Anda perlu memantau permintaan yang gagal tertentu dalam produksi, Anda dapat melakukan satu atau beberapa langkah berikut tanpa memengaruhi performa aplikasi Anda secara negatif:

  • Aktifkan hanya log ringkasan.
  • Tetapkan log lengkap ke level ERROR.
  • Simpan ID permintaan untuk permintaan tertentu yang gagal sehingga Anda dapat membagikannya ke saluran dukungan.

Lihat panduan logging untuk mempelajari lebih lanjut.

Menggunakan opsi ReadyToRun

.NET modern mendukung pra-kompilasi program biner Anda ke platform dan arsitektur tertentu dengan menyetel PublishReadyToRun ke true, lalu memublikasikan program biner dengan menentukan RuntimeIdentifier yang valid. Lihat panduan deployment ReadyToRun untuk mempelajari lebih lanjut.

Menggunakan TieredCompilation

TieredCompilation (diaktifkan secara default di versi .NET modern seperti .NET 8) memungkinkan .NET mengidentifikasi hotspot dan meningkatkan performa runtime. Kompilasi bertingkat berfungsi baik dengan ReadyToRun karena dapat menggunakan gambar yang telah dibuat sebelumnya untuk startup cepat, lalu mengompilasi ulang metode aktif dengan pengoptimalan penuh. Lihat panduan TieredCompilation untuk mempelajari lebih lanjut.

Menyesuaikan pembersihan sampah memori (GC)

.NET menyediakan dua profil umum untuk pembersihan sampah memori (GC): profil workstation dan profil server. Kedua profil ini memiliki trade-off performa yang berbeda. Aplikasi server khusus yang menggunakan library .NET Google Ads sering kali berperforma lebih baik saat berjalan di profil server.

Anda dapat memperoleh manfaat dari penyesuaian setelan GC berikut:

  • Pembersihan sampah memori server: Pembersihan sampah memori server memungkinkan runtime .NET memberikan throughput yang lebih tinggi ke aplikasi Google Ads API dengan beroperasi pada beberapa heap dan thread GC. Lihat panduan GC server untuk mengetahui detail selengkapnya. Anda dapat mengaktifkan pembersihan sampah memori server dengan menambahkan baris berikut ke file .csproj aplikasi Anda:

    <PropertyGroup>
      <ServerGarbageCollection>true</ServerGarbageCollection>
    </PropertyGroup>
    
  • Pembersihan sampah memori serentak: Anda dapat mengaktifkan pembersihan sampah memori serentak untuk memberikan thread khusus untuk pembersihan sampah memori di generasi 2 pada GC .NET. Setelan ini dapat berguna saat memproses laporan besar. Anda dapat mengaktifkan pengumpulan sampah serentak dengan menambahkan baris berikut ke file .csproj aplikasi Anda:

    <PropertyGroup>
      <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection>
    </PropertyGroup>
    
  • Pertahankan pembersihan sampah memori VM: Setelan RetainVMGarbageCollection mengonfigurasi apakah segmen memori virtual yang harus dihapus dimasukkan ke dalam daftar standby untuk penggunaan di masa mendatang, atau dilepaskan kembali ke sistem operasi (OS). Anda dapat mengaktifkan retensi memori virtual dengan menambahkan baris berikut ke file .csproj aplikasi Anda:

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

Anda dapat menyesuaikan GC dengan memilih konfigurasi yang menyeimbangkan perilaku workstation dan server. Semua setelan GC yang relevan dapat ditentukan dalam file runtimeconfig.json aplikasi .NET Anda, melalui variabel lingkungan, atau di App.config Anda.