Uygulama performansı

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

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

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 hizmetlerinin kullandığı gRPC kanallarını önbelleğe alma. Bu, ilk API çağrıları yapılırken kurulum süresini azaltı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 verilen bir erişim jetonunuz varsa bu jetonu, söz konusu hesap hiyerarşisindeki tüm Google Ads müşteri hesaplarına API çağrıları yapmak için kullanabilirsiniz. Bu, GoogleAdsClient örneklerini yeniden kullanmayla birlikte kullanıldığında, istemci kitaplığının erişim jetonlarını yenilemek için yapması gereken gidiş dönüş sayısını daha da azaltabilir.

Mümkünse Arama yerine SearchStream'i kullanın

GoogleAdsService.Search, raporun tamamını indirmek için birden fazla sayfaya ayrı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. Search yanıtının her bir sayfasını istemek için gereken ağ gidiş dönüş süresini ortadan kaldırarak, uygulamanıza bağlı olarak SearchStream, sayfalamayla karşılaştırıldığında 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 uygun olmayabilir. Bu tür ortamlarda, verileri korumak ve yeniden kullanmak için kendi en iyi uygulamalarınız olabilir. Bu gibi durumlarda, kendi erişim jetonu yenileme işlemlerinizi gerçekleştirmek için GoogleAdsConfig sınıfını aşağıdaki gibi 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ın derlemesi için derleme

Sunucuya dağıtırken uygulamanızı Yayın yapılandırması ile derlediğinizden emin olun. Hata ayıklama yapılandırması kullanıldığında 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ı hem CPU hem de bellek kullanımı açısından profilleyin. Visual Studio, uygulamanızın profilini oluşturmanıza yardımcı olacak teşhis araçları sağlar. Kullanabileceğiniz başka ticari profil oluşturma araçları da vardır.

Eşzamansız yöntemler kullanma

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

Eşzamansız yöntemlerin iptal edilmesi

Aşağıdaki durumlarda callSettings parametresini kullanarak CancellationToken değerini ayarlayabilirsiniz:

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.V19.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ığı, günlük kaydını varsayılan olarak devre dışı bırakır ve uygulamanıza daha iyi performans sağlayan, yavaş günlük kaydı yaklaşımı kullanır. Günlüğe kaydetme özelliğini etkinleştirirseniz üretim ortamında devre dışı bıraktığınızdan emin olun. Üretimde belirli başarısız isteklerin olup olmadığını 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 belirli taleplerin istek kimliğini kaydederek destek kanallarıyla paylaşabilirsiniz.

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

SearchStream mi yoksa Search yöntemini mi kullanacağınıza karar verme

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

SearchStream, Search'e kıyasla daha iyi performans sağlar ancak Search'ün tercih edildiği senaryolar vardır.

Bu iki yöntem hakkında daha fazla bilgi edinmek için yayın raporları kılavuzuna göz atın.

ReadyToRun seçeneğini kullanın

.NET Core 3.1, PublishReadyToRun ayarını true olarak belirterek ikili programlarınızı belirli bir platform ve mimariye önceden derleme ve ardından yayınlarken geçerli bir RuntimeIdentifier belirterek ikili programı yayınlama desteği ekler. Daha fazla bilgi edinmek için ReadyToRun özelliğiyle ilgili kılavuzu inceleyin.

TieredCompilation'ı kullanma

TieredCompilation, .NET'in yoğun bölgeleri belirlemesine ve performansını artırmasına olanak tanır. Katmanlı derleme, mevcut olduğunda önceden oluşturulmuş resmi kullanabildiğinden ReadyToRun seçeneğiyle daha iyi çalışır. Daha fazla bilgi edinmek için TieredCompilation ile ilgili kılavuzu inceleyin.

Atık toplama (GC) işlemine ince ayar yapma

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

  • Sunucudaki çöp toplama: Sunucudaki çö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 fazla bilgi için bu kılavuza göz atın. Aşağıdaki satırları uygulamanızın .csproj dosyasına ekleyerek sunucudaki çöp toplama özelliğini etkinleştirebilirsiniz.

    <PropertyGroup>
      <ServerGarbageCollection>true</ServerGarbageCollection>
    </PropertyGroup>
    
  • Eşzamanlı atık toplama: .NET GC'ye 2. nesildeki atık toplama işlemi için özel bir iş parçacığı vermek üzere eşzamanlı atık toplamayı etkinleştirebilirsiniz. Bu ayar, büyük boyutlu raporlar işlenirken 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 toplama işlemini sakla: RetainVMGarbageCollectionAyarı, silinmesi gereken sanal bellek segmentlerinin gelecekte kullanılmak üzere bir bekleme listesine eklenip eklenmeyeceğini veya işletim sistemine (OS) geri bırakılıp bırakılmayacağını yapılandırır. Uygulamanıza aşağıdaki satırları ekleyerek sanal bellek saklama özelliğini etkinleştirebilirsiniz.

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

Bir iş istasyonu ile sunucu arasında bir kurulum seçerek GC'nizde ince ayar yapabilirsiniz. Tüm ilgili ayarlar, .NET Core uygulamanızın runtimeconfig.json dosyasında, bir ortam değişkeninde veya .NET SDK uygulamanızın App.config dosyasında belirtilir.