演習 - Concurrent 関数を使用してパフォーマンスをテストする

完了

このハンズオン演習では、Concurrent 関数を使用してパフォーマンスを強化する方法を確認します。

  1. Power Apps にサインインします。

  2. ホーム画面の左側のナビゲーション メニューで ([空のキャンバス アプリ] から)、+ 作成 > 空のアプリ > 作成を選択します。

  3. アプリに適切なタイトルの名前を付け、作成を選択します。

  4. 最初に 2 つのコレクションを Concurrent 関数を使用せずに作成します。 ボタン コントロールを挿入し、btnCollection と名付けます。Text プロパティを "Collection" に設定して、OnSelect プロパティを次の式に設定します。

    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. 挿入テキスト ラベルを挿入し、BorderThickness プロパティを 3 に設定します。名前を "lblSpeedCollect" に変更し、Text プロパティを次の値に設定します。

    varSpeedCollect
    
  6. Alt キーを押したまま、コレクション ボタンを選択します。 txtSpeedCollect ラベルには、プロセス情報の実行にかかった時間がミリ秒単位で表示されます。

    テキスト ラベルに varSpeedCollect の結果である「2」が表示された [コレクション] ボタンのスクリーンショット。

  7. ここで Concurrent 機能をアプリに追加して、パフォーマンスを比較してみましょう。 ボタン コントロールをもう 1 つ挿入して btnConcurrent と名付けます。Text プロパティを "Concurrent" に設定し、OnSelect プロパティに次の数式を設定します。

    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. テキスト ラベルをもう 1 つ挿入し、BorderThickness プロパティを 3 に設定します。名前を "lblSpeedConcurrent" に変更し、Text プロパティを次の値に設定します。

    varSpeedConcurrent
    
  9. Alt キーを押したまま、Concurrent ボタンを選択します。 これにより、同じ 2 つのコレクションが作成されますが、作成に要する時間が半分になることに注意してください。

    Concurrent の横のラベルに以前の半分の時間が表示されているアプリのスクリーンショット。

Concurrent 関数を追加したことにより、コレクション作成のパフォーマンスが強化されたことがわかります。 この手法を使用して複数のプロセスを一度に実行できますが、Concurrent 関数内で式が開始および終了する順序を予測できないことに留意してください。 Concurrent 関数内で、結果が他の結果に依存しない限り、すべてのタスクを同時に実行できます。 この手法により、アプリのパフォーマンスを大幅に向上させることができます。