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 des 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 lors d'appels d'API. Il offre des optimisations telles que les suivantes :

  • 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éutilisation des 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 des jetons d'accès à partir d'un compte administrateur lorsque cela est possible

  • 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.

Utiliser SearchStream plutôt que Search autant 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 d'aller-retour 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 Search versus SearchStream.

Gérer manuellement les actualisations des jetons d'accès

Dans certains environnements, tels que Google Cloud Functions, il peut être impossible de réutiliser GoogleAdsClient instances. 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

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

Effectuez le profilage de 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 callSettings paramètre 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.V25.GoogleAdsService);

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

Désactiver la journalisation lorsque 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 négativement les performances de votre application :

  • N'activez que 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.

Choisir d'utiliser la méthode SearchStream ou Search

L'API Google Ads offre deux façons principales de 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 dans certains cas, Search est préférable.

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

Utiliser l'option ReadyToRun

.NET Core 3.1 ajoute la prise en charge de la précompilation de vos binaires sur une plate-forme et une architecture spécifiques en spécifiant le 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 ReadyToRun fonctionnalité.

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 la récupération de mémoire

.NET fournit deux profils généraux pour la récupération de mémoire : un profil de poste de travail et un profil de serveur. Ces deux profils présentent des compromis de performances différents. Les applications utilisant la bibliothèque .NET Google Ads ont tendance à être plus performantes lorsqu'elles s'exécutent dans un profil de serveur. Vous pouvez ajuster les paramètres de récupération de mémoire 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 d'API Google Ads en fonctionnant sur plusieurs threads. Pour en savoir plus, consultez ce guide. 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 à .NET GC 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 RetainVMGarbageCollection paramètre configure 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. Vous pouvez activer la conservation de la mémoire virtuelle en ajoutant les lignes suivantes à votre application.

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

Vous pouvez ajuster votre récupération de mémoire en optant pour une configuration intermédiaire entre un poste 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 fichier App.config de votre application .NET SDK.