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 présente les optimisations des performances spécifiques aux applications .NET et complète les bonnes pratiques qui s'appliquent généralement à l'API Google Ads.

Réutiliser GoogleAdsClient autant que 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 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 d'un compte de niveau 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. Lorsqu'elle est combinée à la réutilisation des instances GoogleAdsClient, cette approche 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 au lieu de 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 d'aller-retour réseau requis pour demander chaque page 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 les actualisations des jetons d'accès

Dans certains environnements sans état tels que Google Cloud Functions, il peut ne pas être possible de réutiliser des instances GoogleAdsClient entre les 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 actualiser vous-même les 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 la compilation de version

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 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 utilisant le 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 toutes les 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.V26.GoogleAdsService);

await googleAdsService.SearchStreamAsync(
    request,
    (SearchGoogleAdsStreamResponse resp) =>
    {
        foreach (GoogleAdsRow googleAdsRow in resp.Results)
        {
            // Process the row.
        }
    },
    callSettings);

Désactivez la journalisation dès que possible

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, veillez à la désactiver dans l'environnement de production. Si vous devez surveiller des requêtes spécifiques qui échouent en production, vous pouvez effectuer une ou plusieurs des étapes suivantes sans que cela n'affecte les performances de votre application :

  • Activez uniquement les journaux de résumé.
  • Définissez les journaux complets sur le niveau ERROR.
  • Enregistrez l'ID de requête pour les requêtes spécifiques qui échouent afin de pouvoir le partager avec les canaux d'assistance.

Pour en savoir plus, consultez le guide de journalisation.

Utiliser l'option ReadyToRun

Le .NET moderne permet de précompiler vos binaires sur 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 de ReadyToRun.

Utiliser TieredCompilation

TieredCompilation (activé par défaut dans les versions récentes de .NET, comme .NET 8) permet à .NET d'identifier les hotspots 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 fréquemment utilisées 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 affiner les paramètres de récupération de mémoire suivants :

  • Nettoyage de la mémoire du serveur : le nettoyage de la mémoire du serveur permet à l'environnement d'exécution .NET d'offrir un débit plus élevé à une application de l'API Google Ads en opérant sur plusieurs tas et threads de nettoyage de la mémoire. Pour en savoir plus, consultez le guide sur le GC du 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 lors du traitement de rapports volumineux. Vous pouvez activer la récupération de mémoire simultanée en ajoutant les lignes suivantes au fichier .csproj de votre application :

    <PropertyGroup>
      <ConcurrentGarbageCollection>true</ConcurrentGarbageCollection>
    </PropertyGroup>
    
  • Conserver la récupération de mémoire de la VM : le paramètre RetainVMGarbageCollection détermine si les segments de mémoire virtuelle qui doivent être supprimés sont placés dans une liste d'attente pour une utilisation ultérieure ou s'ils sont 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 du poste de travail et du serveur. Tous les paramètres de récupération de mémoire 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.