Exercice : tester les performances à l’aide de la fonction Concurrent
Cet exercice pratique va vous montrer comment améliorer les performances à l’aide de la fonction Concurrent.
Connectez-vous à Power Apps.
Dans le menu de navigation gauche de l’écran d’accueil, cliquez sur + Créer > Application vide > Créer (sous Application canevas vide).
Nommez votre application avec un titre approprié, puis cliquez sur Créer.
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)));
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
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.
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)));
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
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.
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.