お世話になっております。
しゃまとんです。
開発のしているとListをよく使うのですが、色々と実装している中でリストをまとめて別の型に置き換えて使いたいなーという事がありました(親クラスのリストを小クラスで利用したいとか?)
調べているとどうやらListにはまとめて変換して、そのListを返してくれるConvertAllという機能が用意されているようで便利そうだと思い利用しております。
ただなんとなくですが、Allとか書いてるし処理重そうだな〜、あんまり使わない方がいいかな・・・とちょっと気になったので、実行速度を簡単に調べてみました。
検証コードはこんな感じ。List<float>をList<int>にしてます。
要素を10、100、1000、10000、100000と変えて実行してみました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
using UnityEngine; using System.Collections; using System.Collections.Generic; public class ConvTest : MonoBehaviour { private List<float> list = new List<float>(); // Use this for initialization void Start () { for (int i = 0; i < 100000; i++) { list.Add(Random.Range(1f, 100000f)); } StartCoroutine(check()); } private IEnumerator check() { int count = 0; while (count++ < 5) { float startTime = Time.realtimeSinceStartup; // all convert list.ConvertAll(content => (int)content); float msec = (Time.realtimeSinceStartup - startTime) * 1000f; Debug.Log(msec + " msec"); yield return new WaitForSeconds(1f); } } } |
実行結果のまとめはこんな感じでした。
なぜか2回めからのConvertが早くなっています。なぜでしょうか・・・?ただ、要素数が増えるとその辺もなくなってしまうようです。
10 | 100 | 1000 | 10000 | 100000 | |
---|---|---|---|---|---|
1回目 | 0.3820658 | 0.4429817 | 0.3560781 | 0.8010864 | 4.02391 |
2回目 | 0.003099442 | 0.01096725 | 0.0808239 | 0.7491112 | 6.491899 |
3回目 | 0.002861023 | 0.01502037 | 0.1180172 | 0.4088879 | 8.046865 |
4回目 | 0.003814697 | 0.01096725 | 0.08487701 | 0.7128716 | 7.349968 |
5回目 | 0.004291534 | 0.01192093 | 0.08678436 | 0.7219315 | 7.339954 |
※単位はmsec
現状の使い方はそんなに要素数は多くないので、2回めから早くなる恩恵にあやかりつつ、使っていこうかなと思います。
以上です。
コメント
Sharp thniking! Thanks for the answer.
You’re welcome!