Performances des applications

La bibliothèque cliente Google Ads .NET simplifie les interactions de votre application avec l'API Google Ads, avec une configuration minimale de votre part. Toutefois, les performances globales dépendent fortement de la manière dont la bibliothèque est utilisée et intégrée à votre application.

Ce guide présente les optimisations des performances spécifiques aux applications .NET et complète les bonnes pratiques généralement applicables à l'API Google Ads.

Réutiliser GoogleAdsClient dans la mesure du possible

GoogleAdsClient représente la session d'un utilisateur lors des appels d'API. Il fournit des optimisations telles que:

  • Mise en cache des canaux gRPC utilisés par les services d'API. Cela réduit le temps de configuration lors des appels d'API initiaux.
  • Réutiliser les jetons d'accès lorsque cela est possible. Cela réduit le nombre d'allers-retours que la bibliothèque cliente Google Ads .NET doit effectuer pour actualiser les jetons d'accès.

Utiliser si possible des jetons d'accès à partir d'un compte administrateur

  • Si vous disposez d'un jeton d'accès émis au niveau d'un compte administrateur, vous pouvez l'utiliser pour effectuer des appels d'API sur tous les comptes client Google Ads de cette hiérarchie de comptes. En combinaison avec la réutilisation d'instances GoogleAdsClient, cela peut encore réduire le nombre d'allers-retours que la bibliothèque cliente doit effectuer pour actualiser les jetons d'accès.

Utilisez SearchStream plutôt que la recherche dans la mesure du possible.

Alors que GoogleAdsService.Search peut envoyer plusieurs requêtes paginées pour télécharger l'intégralité du rapport, GoogleAdsService.SearchStream envoie une seule requête et établit une connexion persistante avec l'API Google Ads, quelle que soit la taille du rapport. En éliminant le temps de réseau aller-retour requis pour demander chaque page individuelle d'une réponse Search, selon votre application, SearchStream peut offrir de meilleures performances que la pagination. Pour en savoir plus sur cette optimisation, consultez Recherche par rapport à SearchStream.

Gérer manuellement l'actualisation des jetons d'accès

Dans certains environnements tels que Google Cloud Functions, il peut être impossible de réutiliser des instances GoogleAdsClient. Ces environnements peuvent présenter leurs propres bonnes pratiques pour la persistance et la réutilisation des données. Dans ce cas, vous pouvez étendre la classe GoogleAdsConfig pour effectuer vos propres actualisations de jetons d'accès comme suit.

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

Compiler pour un build

Assurez-vous de compiler votre application à l'aide de la configuration de version lors du déploiement sur le serveur. Lorsque vous utilisez la configuration de débogage, votre application est compilée avec des informations de débogage symboliques complètes et sans optimisation.

Effectuer le profilage de votre application

Profiler votre application pour l'utilisation du processeur et de la mémoire afin d'identifier les goulots d'étranglement de performances Visual Studio fournit des outils de diagnostic pour vous aider à profiler votre application. D'autres outils de profilage commerciaux sont également disponibles.

Utiliser des méthodes asynchrones

La programmation asynchrone à l'aide du paradigme async-await permet d'éviter les goulots d'étranglement de performances et d'améliorer la réactivité globale de votre application. La bibliothèque Google Ads .NET génère des méthodes asynchrones pour tous les services et les méthodes RPC.

Annulation des méthodes asynchrones

Vous pouvez utiliser le paramètre callSettings pour transmettre un CancellationToken à des méthodes asynchrones:

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

Désactivez la journalisation lorsque vous le pouvez.

La bibliothèque Google Ads .NET désactive la journalisation par défaut et utilise une approche de journalisation paresseuse qui améliore les performances de votre application. Si vous activez la journalisation, veillez à la désactiver dans l'environnement de production. Si vous devez surveiller des requêtes défaillantes spécifiques en production, vous pouvez effectuer une ou plusieurs des étapes suivantes sans nuire aux performances de votre application:

  • Activez uniquement les journaux récapitulatifs.
  • Définissez les journaux complets sur le niveau ERROR.
  • Enregistrez l'ID de requête pour les requêtes spécifiques qui vous intéressent et que vous pouvez partager avec les canaux d'assistance.

Pour en savoir plus, consultez le guide de journalisation.

Décider d'utiliser la méthode SearchStream ou Search

L'API Google Ads propose deux principales méthodes pour récupérer des objets: la méthode Search (qui utilise la pagination) et SearchStream (qui utilise le streaming).

SearchStream offre de meilleures performances que Search, mais il existe des scénarios où Search est préférable.

Pour en savoir plus sur ces deux méthodes, consultez le guide des rapports sur le streaming.

Utiliser l'option ReadyToRun

.NET Core 3.1 permet de précompiler vos binaires sur une plate-forme et une architecture spécifiques en spécifiant un paramètre PublishReadyToRun sur true, puis de publier le binaire en spécifiant un RuntimeIdentifier valide lors de la publication. Pour en savoir plus, consultez le guide sur la fonctionnalité ReadyToRun.

Utiliser TieredCompilation

TieredCompilation permet à .NET d'identifier les points chauds et d'améliorer ses performances. La compilation par niveaux fonctionne mieux avec l'option ReadyToRun, car elle peut utiliser l'image prégénérée lorsqu'elle est disponible. Pour en savoir plus, consultez le guide sur TieredCompilation.

Ajuster votre récupération de mémoire (GC)

.NET fournit deux profils généraux pour le garbage collection (GC): un profil de station de travail et un profil de serveur. Ces deux profils présentent des compromis de performances différents. Les applications qui utilisent la bibliothèque .NET Google Ads enregistrent généralement de meilleures performances lorsqu'elles s'exécutent dans un profil de serveur. Vous pouvez affiner les paramètres GC suivants.

  • Récupération de mémoire du serveur:la récupération de mémoire du serveur permet à l'environnement d'exécution .NET d'améliorer les performances d'une application de l'API Google Ads en fonctionnant sur plusieurs threads. Pour en savoir plus, consultez ce guide. Vous pouvez activer le nettoyage des déchets du serveur en ajoutant les lignes suivantes au fichier .csproj de votre application.

    <PropertyGroup>
      <ServerGarbageCollection>true</ServerGarbageCollection>
    </PropertyGroup>
    
  • Récupération de mémoire simultanée:vous pouvez activer la récupération de mémoire simultanée pour fournir au GC .NET un thread dédié à la récupération de mémoire de la génération 2. Ce paramètre peut être utile lorsque vous traitez des rapports volumineux. Vous pouvez activer le nettoyage de mémoire concurrent en ajoutant les lignes suivantes au fichier .csproj de votre application.

    <PropertyGroup>
      <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection>
    </PropertyGroup>
    
  • Conserver la collecte des déchets de la VM:le paramètre RetainVMGarbageCollection configure si les segments de mémoire virtuelle à supprimer sont placés sur une liste de veille pour une utilisation ultérieure ou s'ils sont remis au système d'exploitation (OS). Vous pouvez activer la rétention de mémoire virtuelle en ajoutant les lignes suivantes à votre application.

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

Vous pouvez affiner votre GC en optant pour une configuration entre une station de travail et un serveur. Tous les paramètres pertinents sont spécifiés dans le fichier runtimeconfig.json de votre application .NET Core, une variable d'environnement ou le App.config de votre application du SDK .NET.