Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9551

UnityC#のListのforeach GCゴミ

$
0
0

はじめに

河合さんの記事, 今はどうなっているのかな?という調査です.
neue cc - C#のGCゴミとUnity(5.5)のコンパイラアップデートによるListのforeach問題解決について
有名なforeachのGCゴミについてです.

テストコード

usingSystem.Collections.Generic;usingUnityEngine;usingUnityEngine.Profiling;usingUnityEngine.UI;publicclassForEach:MonoBehaviour{[SerializeField]privateButtonbutton_=null;privateint[]array_=newint[]{1,2,3,4,5};privateList<int>list_=newList<int>{1,2,3,4,5};privatevoidStart(){button_.onClick.AddListener(onClick);}privatevoidonClick(){Profiler.BeginSample("GCAllocCheck:Array");foreach(variteminarray_){}Profiler.EndSample();Profiler.BeginSample("GCAllocCheck:List");foreach(variteminlist_){}Profiler.EndSample();}}

結果

バージョンごとに調査(したい).

5.6.4f1

起動後初めてボタンを押下した場合だけ, ゴミが出る. 原因は未調査.

  • 1回目
    GCAlloc5.6.4f1_00.png

  • 2回目
    GCAlloc5.6.4f1_01.png

まとめ

エディタ上で調査しているため, ビルドすると異なる可能性がある. もちろんターゲットにより異なる可能性がある.
原因はGetEnumeratorに関連しているため, ゴミが出る場合は, LINQを使うと目も当てられない結果になるだろう(調査していないため予測).

5.6.4f1

1回目だけ32 bytesゴミが出る. 原因まで調査していないため, 2回目以降必ずゴミが出ないかは不明.
コードの読みやすさ次第で使用できそうだが, クリティカルな箇所では for にしておく方がよさそう.


Viewing all articles
Browse latest Browse all 9551

Trending Articles