Performances des applications

La bibliothèque cliente .NET Google Ads 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 traite des optimisations de performances spécifiques aux applications .NET et complète les bonnes pratiques généralement applicables à l'API Google Ads.

Réutiliser GoogleAdsClient autant que possible

GoogleAdsClient représente la session d'un utilisateur lorsqu'il effectue 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 premiers appels d'API.
  • Réutilisez les jetons d'accès lorsque cela est possible. Cela réduit le nombre d'allers-retours que la bibliothèque cliente .NET Google Ads doit effectuer pour actualiser les jetons d'accès.

Utiliser si possible des jetons d'accès provenant 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. Combiné à la réutilisation des instances GoogleAdsClient, cela peut réduire davantage le nombre d'allers-retours que la bibliothèque cliente doit effectuer pour actualiser les jetons d'accès.

Utilisez SearchStream plutôt que Search chaque fois que 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 trajet réseau nécessaire pour demander chaque page individuelle d'une réponse Search, SearchStream peut offrir de meilleures performances que la pagination, selon votre application. Pour en savoir plus sur cette optimisation, consultez Comparaison entre Search et 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 les instances GoogleAdsClient. Ces environnements peuvent être fournis avec leurs propres bonnes pratiques pour conserver et réutiliser les 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 le build de version

Assurez-vous de compiler votre application à l'aide de la configuration de version lorsque vous la déployez 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

Profilez votre application pour l'utilisation du processeur et de la mémoire afin d'identifier les goulots d'étranglement. 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 des performances et d'améliorer la réactivité globale de votre application. La bibliothèque .NET Google Ads génère des méthodes asynchrones pour tous les services et méthodes RPC.

Annulation des méthodes asynchrones

Vous pouvez utiliser le paramètre callSettings pour transmettre un CancellationToken aux 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.V21.GoogleAdsService);

googleAdsService.SearchStream(request,
    delegate (SearchGoogleAdsStreamResponse resp)
    {
        foreach (GoogleAdsRow googleAdsRow in resp.Results)
        {
            // Process the row.
        }
    }, callSettings
);

Désactiver la journalisation quand vous le pouvez

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

  • Activez uniquement les journaux récapitulatifs.
  • Définissez le niveau des journaux complets sur 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.

Choisir d'utiliser la méthode SearchStream ou Search

L'API Google Ads propose deux méthodes principales 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 dans lesquels Search est préférable.

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

Utiliser l'option ReadyToRun

.NET Core 3.1 permet de précompiler vos binaires pour une plate-forme et une architecture spécifiques en définissant un paramètre PublishReadyToRun sur true, puis en publiant 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éconfigurée lorsqu'elle est disponible. Pour en savoir plus, consultez le guide sur TieredCompilation.

Affiner la récupération de mémoire

.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 ont tendance à être plus performantes lorsqu'elles s'exécutent dans un profil de serveur. Vous pouvez affiner les paramètres suivants du GC.

  • Récupération de mémoire côté serveur : la récupération de mémoire côté serveur permet au runtime .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 garbage collection 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 attribuer un thread dédié à la récupération de mémoire dans la génération 2 de .NET GC. Ce paramètre peut être utile lorsque vous traitez des rapports volumineux. Vous pouvez activer le garbage collection simultané en ajoutant les lignes suivantes au fichier .csproj de votre application.

    <PropertyGroup>
      <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection>
    </PropertyGroup>
    
  • Conserver le garbage collection de la VM : le paramètre RetainVMGarbageCollection permet de configurer si les segments de mémoire virtuelle qui doivent être supprimés sont placés sur une liste d'attente pour une utilisation ultérieure ou sont libérés et renvoyés au système d'exploitation (OS). Vous pouvez activer la conservation de la 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 intermédiaire entre un poste de travail et un serveur. Tous les paramètres concernés sont spécifiés dans le fichier runtimeconfig.json de votre application .NET Core, dans une variable d'environnement ou dans le fichier App.config de votre application .NET SDK.