Uygulama performansı

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

Bu kılavuzda, .NET uygulamalarına özel 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 kullanın.

GoogleAdsClient, API çağrıları yapılırken kullanıcının oturumunu temsil eder. Aşağıdakiler gibi optimizasyonlar sağlar:

  • API hizmetleri tarafından kullanılan gRPC kanallarını önbelleğe alma. Bu, ilk API çağrıları yapılırken kurulum süresini kısaltı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 gerçekleştirmesi 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, söz konusu hesap hiyerarşisi altındaki tüm Google Ads müşteri hesaplarına yönelik API çağrıları yapmak için kullanabilirsiniz. Bu özellik, GoogleAdsClient örneklerinin yeniden kullanılmasıyla birlikte, istemci kitaplığının erişim jetonlarını yenilemek için gerçekleştirmesi gereken gidiş dönüş sayısını daha da azaltabilir.

Mümkün olduğunda Arama yerine SearchStream'i kullanın.

GoogleAdsService.Search, raporun tamamını indirmek için birden fazla sayfalandırılmış istek gönderebilirken GoogleAdsService.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. Bir Search yanıtının her bir sayfasını istemek için gereken gidiş-dönüş ağ süresini ortadan kaldırarak, uygulamanıza bağlı olarak SearchStream, sayfalama işlemine kıyasla daha iyi performans sunabilir. Bu optimizasyon hakkında daha fazla bilgi edinmek için Arama ve SearchStream karşılaştırması başlıklı makaleyi inceleyin.

Erişim jetonu yenilemelerini manuel olarak yönetme

Google Cloud Functions gibi belirli ortamlarda GoogleAdsClient örneklerini yeniden kullanmak mümkün olmayabilir. Bu tür ortamlar, verileri kalıcı hale getirmek ve yeniden kullanmak için kendi en iyi uygulamalarıyla birlikte gelebilir. Bu gibi durumlarda, kendi erişim jetonu yenileme işlemlerinizi gerçekleştirmek için GoogleAdsConfig sınıfını aşağıdaki şekilde genişletebilirsiniz.

// Create your own config class by extending the GoogleAdsConfig class.

class MyGoogleAdsConfig : GoogleAdsConfig
{
    public MyGoogleAdsConfig() : base()
    {
        // Disable the library's in-built channel caching mechanism.
        this.UseChannelCache = false;
    }
    protected override ICredential CreateCredentials()
    {
        // TODO: Create your own ICredentials object here. You may refer to the
        // default implementation of GoogleAdsConfig::CreateCreateCredentials
        // 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ı Release yapılandırması ile derlediğinizden emin olun. Hata ayıklama yapılandırması kullanılırken uygulamanız, tam sembolik hata ayıklama bilgileriyle ve optimizasyon olmadan derlenir.

Uygulamanız için profil oluşturma

Performans darboğazlarını belirlemek için uygulamanızın hem CPU hem de bellek kullanımına yönelik profilini oluşturun. Visual Studio, uygulamanızın profilini oluşturmanıza yardımcı olacak tanılama araçları sağlar. Ayrıca, kullanabileceğiniz diğer ticari profilleme araçları da vardır.

Eşzamansız yöntemleri kullanma

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

Eşzamansız yöntemlerin iptali

callSettings parametresini kullanarak, CancellationToken değerini asenkron yöntemlere iletebilirsiniz:

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.V20.GoogleAdsService);

googleAdsService.SearchStream(request,
    delegate (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ırakın

Google Ads .NET kitaplığı, varsayılan olarak günlük kaydını devre dışı bırakır ve uygulamanızın daha iyi performans göstermesini sağlayan geç günlük kaydı yaklaşımını kullanır. Günlüğü etkinleştirirseniz üretim ortamında devre dışı bıraktığınızdan emin olun. Üretimde belirli başarısız 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.
  • İlgilendiğiniz ve destek kanallarıyla paylaşabileceğiniz belirli isteklerin istek kimliğini kaydedin.

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

SearchStream veya Search yöntemini kullanıp kullanmayacağınıza karar verme

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

SearchStream, Search'ye kıyasla daha iyi performans sunar ancak Search'nin tercih edildiği senaryolar da vardır.

İki yöntem hakkında daha fazla bilgi edinmek için yayın raporları kılavuzuna bakın.

ReadyToRun seçeneğini kullanma

.NET Core 3.1, PublishReadyToRun ayarını true olarak belirterek ikili dosyalarınızı belirli bir platform ve mimari için önceden derleme desteği ekler. Ardından, yayınlarken geçerli bir RuntimeIdentifier belirterek ikili dosyayı yayınlar. Daha fazla bilgi edinmek için ReadyToRun özelliğiyle ilgili kılavuza bakın.

Use TieredCompilation

TieredCompilation, .NET'in yoğun bölgeleri belirlemesine ve performansını iyileştirmesine olanak tanır. Kademeli derleme, ReadyToRun seçeneğiyle daha iyi çalışır. Çünkü bu seçenek, önceden oluşturulmuş resmi kullanabilir. Daha fazla bilgi edinmek için TieredCompilation ile ilgili kılavuza bakın.

Atık toplama (GC) işleminizi hassas bir şekilde ayarlama

.NET, çöp toplama (GC) için iki genel profil sağlar: iş istasyonu profili ve sunucu profili. Bu iki profilin performans açısından farklı avantajları ve dezavantajları vardır. Google Ads .NET kitaplığını kullanan uygulamalar, sunucu profilinde çalıştırıldığında daha iyi performans gösterir. Aşağıdaki GC ayarlarını hassas bir şekilde yaparak avantaj elde edebilirsiniz.

  • Sunucu çöp toplama: Sunucu çöp toplama, .NET çalışma zamanının birden fazla iş parçacığında çalışarak Google Ads API uygulamasına daha iyi performans sunmasına olanak tanır. Daha ayrıntılı bilgi için bu kılavuza bakın. Aşağıdaki satırları uygulamanızın .csproj dosyasına ekleyerek sunucu çöp toplama işlemini etkinleştirebilirsiniz.

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

    <PropertyGroup>
      <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection>
    </PropertyGroup>
    
  • VM çöp toplama işlemini koru: RetainVMGarbageCollection ayarı, silinmesi gereken sanal bellek segmentlerinin gelecekte kullanılmak üzere bekleme listesine alınıp alınmayacağını veya işletim sistemine (OS) geri verilip verilmeyeceğini yapılandırır. Uygulamanıza aşağıdaki satırları ekleyerek sanal bellek tutmayı etkinleştirebilirsiniz.

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

İş istasyonu ile sunucu arasında bir kurulumu tercih ederek GC'nizi hassas bir şekilde ayarlayabilirsiniz. İlgili tüm ayarlar, .NET Core uygulamanızın runtimeconfig.json dosyasında, bir ortam değişkeninde veya .NET SDK uygulamanızın App.config içinde belirtilir.