メインのフローでCSVファイルを読み込んで、Parallelサブフローに渡す処理を作成し、1回のループの場合と8回のループの場合でのメモリ使用量を測定しました。
合計メモリ | 空きメモリ | 使用メモリ | |
---|---|---|---|
実行前 | 909.5 | 897.4 | 12.1 |
1回ループ | 910.5 | 837.2 | 73.3 |
8回ループ | 910.5 | 411.5 | 499 |
1回ループの実際の使用メモリは実行前の使用メモリを引いて73.3 - 12.1 = 61.2MBとなります。8回ループの実際の使用メモリは実行前の使用メモリを引いて499 - 12.1 = 486.9MBとなります。ここで多重度を考えると、8回ループというのは8多重で動いているということになりますので、使用メモリを8で割ると1多重分の使用メモリを計算することができます。そこで、8回ループの使用メモリ486.9MBを8で割ると60.9MBとなり、これが1多重分の使用メモリです。そして、これは1回ループの場合の61.2MBとほぼ同じになりました。
以前からあるTimerコンポーネントの場合も見てみましょう。
合計メモリ | 空きメモリ | 使用メモリ | |
---|---|---|---|
実行前 | 909.5 | 897.4 | 12.1 |
1回ループ | 910.5 | 837.6 | 72.9 |
8回ループ | 910.5 | 409.2 | 501.3 |
使用メモリを見てみるとParallelSubFlowコンポーネントとほとんど同じ結果となっていることが分かります。
以前のバージョンのParallelSubFlowコンポーネントは、Timerコンポーネントと比較して非常に多くのメモリを必要としていましたが、WARP4.8ではコンポーネントの実装を大幅に変更し、Timerコンポーネントとほぼ同じメモリ使用量となりました。
最後に、WARP4.8のParallelSubFlowコンポーネントの特徴をまとめると次のようになります。
- メモリ使用量はTimerコンポーネントと同等
- 1多重のメモリ使用量を計算すれば、n多重で実行した時のメモリ使用量は「n×1多重のメモリ使用量」となる
- 最大並列実行数プロパティで最大実行数を制御できる
- サブフローの結果を待ち合わせることができる
マルチコア、マルチCPUのCPUスペックを活かすために、ParallelSubFlowコンポーネントを使用してみてはいかがでしょうか。