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 couvre les 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éutiliser 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

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

Alors que Search envoie plusieurs requêtes paginées pour télécharger un rapport complet, 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 aller-retour nécessaire pour demander chaque page individuelle d'une réponse Search, SearchStream offre généralement de meilleures performances que la pagination. Consultez le guide sur les rapports de streaming pour savoir quand choisir chaque méthode.

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

Dans certains environnements sans état tels que Google Cloud Functions, il peut être impossible de réutiliser les instances GoogleAdsClient lors des appels. Ces environnements ont leurs propres bonnes pratiques pour conserver et réutiliser les données.

Dans Google.Ads.GoogleAds v27.0.0 et versions ultérieures, vous pouvez injecter votre propre instance ICredential préconfigurée directement sur GoogleAdsConfig à l'aide de la propriété Credentials et désactiver la mise en cache des canaux (UseChannelCache = false).

Si vous préférez encapsuler la création d'identifiants dans une classe de configuration personnalisée (ou si vous utilisez une version antérieure de la bibliothèque), 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 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);

Compiler pour le build de version

Assurez-vous de compiler votre application à l'aide de la configuration de publication 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 optimisations du compilateur.

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 des 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 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 à des méthodes asynchrones telles que SearchStreamAsync :

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

await googleAdsService.SearchStreamAsync(
    request,
    (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 pendant le développement, 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 les journaux complets sur le niveau ERROR.
  • Enregistrez l'ID des requêtes spécifiques ayant échoué afin de pouvoir le partager avec les canaux d'assistance.

Pour en savoir plus, consultez le guide de journalisation.

Utiliser l'option ReadyToRun

.NET moderne permet de précompiler vos binaires pour une plate-forme et une architecture spécifiques en définissant PublishReadyToRun sur true, puis en publiant le binaire en spécifiant un RuntimeIdentifier valide. Pour en savoir plus, consultez le guide de déploiement ReadyToRun.

Utiliser TieredCompilation

TieredCompilation (activé par défaut dans les versions modernes de .NET, comme .NET 8) permet à .NET d'identifier les points chauds et d'améliorer les performances d'exécution. La compilation par niveaux fonctionne bien avec ReadyToRun, car elle peut utiliser l'image pré-générée pour un démarrage rapide, puis recompiler les méthodes à chaud avec des optimisations complètes. Pour en savoir plus, consultez le guide TieredCompilation.

Affiner la récupération de mémoire (GC)

.NET fournit deux profils généraux pour la récupération de mémoire (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 de serveur dédié utilisant la bibliothèque .NET Google Ads sont souvent plus performantes lorsqu'elles s'exécutent dans un profil de serveur.

Vous pouvez bénéficier du réglage précis des paramètres de 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'offrir un débit plus élevé à une application d'API Google Ads en fonctionnant sur plusieurs tas de mémoire et threads de récupération de mémoire. Pour en savoir plus, consultez le guide sur le garbage collection côté serveur. Vous pouvez activer la récupération de mémoire 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 au GC .NET un thread dédié à la récupération de mémoire dans la génération 2. 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 au fichier .csproj de votre application :

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

Vous pouvez affiner votre GC en choisissant une configuration qui équilibre le comportement des postes de travail et des serveurs. Tous les paramètres GC pertinents peuvent être spécifiés dans le fichier runtimeconfig.json de votre application .NET, via des variables d'environnement ou dans votre App.config.