Exercice : tester les performances à l’aide de la fonction Concurrent

Effectué

Cet exercice pratique va vous montrer comment améliorer les performances à l’aide de la fonction Concurrent.

  1. Connectez-vous à Power Apps.

  2. Dans le menu de navigation gauche de l’écran d’accueil, cliquez sur + Créer > Application vide > Créer (sous Application canevas vide).

  3. Nommez votre application avec un titre approprié, puis cliquez sur Créer.

  4. Tout d’abord, nous allons créer deux collections sans utiliser la fonction Concurrent. Insérez un contrôle Bouton, nommez-le btnCollection, puis définissez sa propriété Text sur "Collection" et sa propriété OnSelect sur cette formule :

    Set(varStart,Now());
    ClearCollect(colFruit,
    {Name: "banana", Category: "fruit",AvgCost: .49},
    {Name: "peach", Category: "fruit",AvgCost: 1.12},
    {Name: "strawberry", Category: "fruit",AvgCost: 2.99},
    {Name: "apple", Category: "fruit",AvgCost: 0.98},
    {Name: "orange", Category: "fruit",AvgCost: 1.49},
    {Name: "pear", Category: "fruit",AvgCost: 0.97},
    {Name: "cantaloupe", Category: "fruit",AvgCost: 3.99},
    {Name: "pineapple", Category: "fruit",AvgCost: 2.49},
    {Name: "cherry", Category: "fruit",AvgCost: 4.99},
    {Name: "mango", Category: "fruit",AvgCost: .99}
    );
    ClearCollect(colVegetable,
    {Name: "carrot", Category: "vegetable",AvgCost: .95},
    {Name: "lettuce", Category: "vegetable",AvgCost: 1.69},
    {Name: "potato", Category: "vegetable",AvgCost: 5.14},
    {Name: "zuccini", Category: "vegetable",AvgCost: 1.99},
    {Name: "broccoli", Category: "vegetable",AvgCost: 1.49},
    {Name: "cabbage", Category: "vegetable",AvgCost: 2.48},
    {Name: "celery", Category: "vegetable",AvgCost: 1.65},
    {Name: "asparagus", Category: "vegetable",AvgCost: 2.99},
    {Name: "kale", Category: "vegetable",AvgCost: 1.99},
    {Name: "cauliflower", Category: "vegetable",AvgCost: 3.24});
    Set(varSpeedCollect, Text(DateDiff(varStart, Now(), TimeUnit.Milliseconds)));
    
  5. Insérez un contrôle Libellé de texte, définissez sa propriété BorderThickness sur 3, redéfinissez son nom sur lblSpeedCollect, puis définissez sa propriété Text sur :

    varSpeedCollect
    
  6. Maintenez enfoncée la touche Alt, puis sélectionnez le bouton Collection. Le libellé txtSpeedCollect affiche en millisecondes le temps nécessaire pour exécuter le processus.

    Capture d’écran des résultats du bouton Collection illustrant le résultat varSpeedCollect de 2 dans le libellé de texte.

  7. Ajoutons maintenant la fonction Concurrent à notre application pour comparer les performances. Insérez un autre contrôle Bouton, nommez-le btnConcurrent, puis définissez sa propriété Text sur « Concurrent » et sa propriété OnSelect sur cette formule :

    Set(varStart,Now());
    Concurrent(
    ClearCollect(collectFruit,
    {Name: "banana", Category: "fruit",AvgCost: .49},
    {Name: "peach", Category: "fruit",AvgCost: 1.12},
    {Name: "strawberry", Category: "fruit",AvgCost: 2.99},
    {Name: "apple", Category: "fruit",AvgCost: 0.98},
    {Name: "orange", Category: "fruit",AvgCost: 1.49},
    {Name: "pear", Category: "fruit",AvgCost: 0.97},
    {Name: "cantaloupe", Category: "fruit",AvgCost: 3.99},
    {Name: "pineapple", Category: "fruit",AvgCost: 2.49},
    {Name: "cherry", Category: "fruit",AvgCost: 4.99},
    {Name: "mango", Category: "fruit",AvgCost: .99}
    ),
    ClearCollect(collectVegetable,
    {Name: "carrot", Category: "vegetable",AvgCost: .95},
    {Name: "lettuce", Category: "vegetable",AvgCost: 1.69},
    {Name: "potato", Category: "vegetable",AvgCost: 5.14},
    {Name: "zucchini", Category: "vegetable",AvgCost: 1.99},
    {Name: "broccoli", Category: "vegetable",AvgCost: 1.49},
    {Name: "cabbage", Category: "vegetable",AvgCost: 2.48},
    {Name: "celery", Category: "vegetable",AvgCost: 1.65},
    {Name: "asparagus", Category: "vegetable",AvgCost: 2.99},
    {Name: "kale", Category: "vegetable",AvgCost: 1.99},
    {Name: "cauliflower", Category: "vegetable",AvgCost: 3.24}));
    Set(varSpeedConcurrent, Text(DateDiff(varStart, Now(), TimeUnit.Milliseconds)));
    
  8. Insérez un autre contrôle Libellé de texte, définissez sa propriété BorderThickness sur 3, redéfinissez son nom sur lblSpeedConcurrent, puis définissez sa propriété Text sur :

    varSpeedConcurrent
    
  9. Maintenez enfoncée la touche Alt, puis sélectionnez le bouton Concurrent. Cette action entraîne la création des deux mêmes collections et vous devriez remarquer qu’elle prend la moitié du temps.

    Capture d’écran de l’application avec le libellé en regard de la fonction Concurrent affichant la moitié du temps qu’auparavant.

Vous pouvez voir qu’en ajoutant la fonction Concurrent, nous avons amélioré les performances de la création de nos collections. Elle vous permet d’exécuter plusieurs processus simultanément, en gardant à l’esprit que vous ne pouvez pas prédire l’ordre dans lequel les formules de la fonction Concurrent commencent et se terminent. Tant que vos résultats ne dépendent pas d’autres résultats au sein de votre fonction Concurrent, toutes les tâches peuvent s’exécuter en même temps. Cette technique permet d’améliorer considérablement les performances de votre application.