Uygulama performansı

Google Ads .NET istemci kitaplığı, uygulamanızın Google Ads API ile etkileşimlerini basitleştirir ve minimum düzeyde yapılandırma gerektirir. Ancak genel performans, kitaplığın nasıl kullanıldığına ve uygulamanıza nasıl entegre edildiğine bağlıdır.

Bu kılavuzda, .NET uygulamalarına özgü performans optimizasyonları ele alınmakta ve Google Ads API için genel olarak geçerli olan en iyi uygulamalar tamamlanmaktadır.

Mümkün olduğunda GoogleAdsClient'ı yeniden kullanma

GoogleAdsClient, API çağrıları yaparken kullanıcının oturumunu temsil eder. Aşağıdaki gibi optimizasyonlar sunar:

  • API hizmetleri tarafından kullanılan gRPC kanallarını önbelleğe alma. Bu sayede, ilk API çağrılarını yaparken kurulum süresi kısalır.
  • Mümkün olduğunda erişim jetonlarını yeniden kullanma Bu, Google Ads .NET istemci kitaplığının erişim jetonlarını yenilemek için yapması gereken gidiş dönüş sayısını azaltır.

Mümkün olduğunda yönetici düzeyindeki bir hesaptan erişim jetonları kullanın.

Yönetici hesabı düzeyinde verilmiş bir erişim jetonunuz varsa bu jetonu kullanarak söz konusu hesap hiyerarşisindeki tüm Google Ads müşteri hesapları için API çağrıları yapabilirsiniz. GoogleAdsClient örneklerinin yeniden kullanılmasıyla birleştirildiğinde bu, istemci kitaplığının erişim jetonlarını yenilemek için yapması gereken gidiş dönüş sayısını daha da azaltabilir.

Mümkün olduğunda Search yerine SearchStream kullanın.

Google Ads API, nesneleri almak için iki ana yöntem sunar: GoogleAdsService.Search (sayfalandırma kullanır) ve GoogleAdsService.SearchStream (akış kullanır).

Search, bir raporun tamamını indirmek için birden fazla sayfalandırılmış istek gönderirken SearchStream, rapor boyutundan bağımsız olarak tek bir istek gönderir ve Google Ads API ile kalıcı bir bağlantı başlatır. Search yanıtının her bir sayfasını istemek için gereken gidiş dönüş ağ süresini ortadan kaldıran SearchStream, genellikle sayfalara ayırmaya kıyasla daha iyi performans sunar. Her bir yöntemi ne zaman seçeceğiniz hakkında daha fazla bilgi edinmek için akış raporları kılavuzuna bakın.

Erişim jetonu yenilemelerini manuel olarak yönetme

Google Cloud Functions gibi belirli durumsuz ortamlarda, çağrılar arasında GoogleAdsClient örneklerini yeniden kullanmak mümkün olmayabilir. Bu tür ortamlarda, verileri kalıcı hale getirmek ve yeniden kullanmak için kendi en iyi uygulamaları vardır.

Google.Ads.GoogleAds v27.0.0 ve sonraki sürümlerde, Credentials özelliğini kullanarak önceden yapılandırılmış kendi ICredential örneğinizi doğrudan GoogleAdsConfig içine ekleyebilir ve kanal önbelleğe almayı (UseChannelCache = false) devre dışı bırakabilirsiniz.

Kimlik bilgisi oluşturma işlemini özel bir yapılandırma sınıfında kapsüllemeyi tercih ediyorsanız (veya kitaplığın önceki bir sürümünü kullanıyorsanız) kendi erişim jetonu yenileme işlemlerinizi aşağıdaki gibi gerçekleştirmek için GoogleAdsConfig sınıfını genişletebilirsiniz:

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

Yayınlanan derleme için derleme

Sunucuya dağıtırken uygulamanızı Yayın yapılandırması'nı kullanarak derlediğinizden emin olun. Hata ayıklama yapılandırmasını kullanırken uygulamanız, tam sembolik hata ayıklama bilgileriyle ve derleyici optimizasyonları olmadan derlenir.

Uygulamanız için profil oluşturma

Performans sorunlarını tespit etmek için uygulamanızın hem CPU hem de bellek kullanımını profilleme. Visual Studio, uygulamanızın profilini oluşturmanıza yardımcı olacak tanılama araçları sağlar. Kullanabileceğiniz başka ticari profil oluşturma araçları da vardır.

Asenkron yöntemleri kullanma

async-await paradigmasını kullanan eşzamansız programlama, performans darboğazlarını önlemeye yardımcı olur ve uygulamanızın genel yanıt verme hızını artırır. Google Ads .NET kitaplığı, tüm hizmetler ve RPC yöntemleri için eşzamansız yöntemler oluşturur.

Eşzamansız yöntemlerin iptali

SearchStreamAsync gibi eş zamansız yöntemlere CancellationToken iletmek için callSettings parametresini kullanabilirsiniz:

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

Mümkün olduğunda günlük kaydını devre dışı bırakma

Google Ads .NET kitaplığı, günlük kaydını varsayılan olarak devre dışı bırakır ve uygulamanızın daha iyi performans göstermesini sağlayan bir geç günlük kaydı yaklaşımı kullanır. Geliştirme sırasında günlük kaydını etkinleştirirseniz üretim ortamında devre dışı bıraktığınızdan emin olun. Üretim ortamında başarısız olan belirli istekleri izlemeniz gerekiyorsa uygulamanızın performansını olumsuz etkilemeden aşağıdaki adımlardan birini veya daha fazlasını uygulayabilirsiniz:

  • Yalnızca özet günlüklerini etkinleştirin.
  • Tam günlükleri ERROR düzeyine ayarlayın.
  • Başarısız olan belirli isteklerin istek kimliğini kaydederek destek kanallarıyla paylaşabilirsiniz.

Daha fazla bilgi edinmek için günlük kaydı kılavuzuna bakın.

ReadyToRun seçeneğini kullanma

Modern .NET, PublishReadyToRun değerini true olarak ayarlayarak ikili dosyalarınızı belirli bir platform ve mimari için önceden derlemeyi ve ardından geçerli bir RuntimeIdentifier belirterek ikili dosyayı yayınlamayı destekler. Daha fazla bilgi edinmek için ReadyToRun dağıtım kılavuzuna bakın.

TieredCompilation kullanma

TieredCompilation (.NET 8 gibi modern .NET sürümlerinde varsayılan olarak etkindir), .NET'in etkin noktaları belirlemesine ve çalışma zamanı performansını iyileştirmesine olanak tanır. Kademeli derleme, hızlı başlatma için önceden oluşturulmuş görüntüyü kullanabildiği ve ardından sık kullanılan yöntemleri tam optimizasyonlarla yeniden derleyebildiği için ReadyToRun ile iyi çalışır. Daha fazla bilgi edinmek için TieredCompilation kılavuzuna bakın.

Atık toplama (GC) işleminizi hassaslaştırma

.NET, çöp toplama (GC) için iki genel profil sunar: iş istasyonu profili ve sunucu profili. Bu iki profilin performans ödünleri farklıdır. Google Ads .NET kitaplığını kullanan özel sunucu uygulamaları, genellikle bir sunucu profilinde çalıştırıldığında daha iyi performans gösterir.

Aşağıdaki GC ayarlarında ince ayar yaparak avantaj elde edebilirsiniz:

  • Sunucu çöp toplama: Sunucu çöp toplama, .NET çalışma zamanının birden fazla GC yığını ve iş parçacığı üzerinde çalışarak Google Ads API uygulamasına daha yüksek işleme hızı sağlamasına olanak tanır. Daha fazla bilgi için sunucu GC kılavuzuna bakın. Uygulamanızın .csproj dosyasına aşağıdaki satırları ekleyerek sunucu çöp toplamayı etkinleştirebilirsiniz:

    <PropertyGroup>
      <ServerGarbageCollection>true</ServerGarbageCollection>
    </PropertyGroup>
    
  • Eşzamanlı atık toplama: .NET GC'ye 2. nesilde atık toplama için özel bir iş parçacığı sağlamak üzere eşzamanlı atık toplamayı etkinleştirebilirsiniz. Bu ayar, büyük raporları işlerken yararlı olabilir. Uygulamanızın .csproj dosyasına aşağıdaki satırları ekleyerek eşzamanlı çöp toplamayı etkinleştirebilirsiniz:

    <PropertyGroup>
      <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection>
    </PropertyGroup>
    
  • Sanal makine çöp toplamayı koru: RetainVMGarbageCollection ayarı, silinmesi gereken sanal bellek segmentlerinin gelecekte kullanılmak üzere bekleme listesine mi alınacağını yoksa işletim sistemine (OS) geri mi bırakılacağını yapılandırır. Uygulamanızın .csproj dosyasına aşağıdaki satırları ekleyerek sanal bellek saklamayı etkinleştirebilirsiniz:

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

İş istasyonu ve sunucu davranışını dengeleyen bir kurulum seçerek GC'nizde ince ayar yapabilirsiniz. İlgili tüm GC ayarları, .NET uygulamanızın runtimeconfig.json dosyasında, ortam değişkenleri aracılığıyla veya App.config dosyanızda belirtilebilir.