さまざまな方法でクラス構造を作成して$"a: {a}, b: {b}" の形式で文字列出力するサンプルコードを実行し、アクセス速度を測定しました。以下は、100,000回の文字列出力にかかる時間を比較した結果です。
public class TestClass{
public int A;
public string B;
}- Variable_Access: クラス構造を作成しないて通常の変数宣言を使用。
$"a: {a}, b: {b}"で直接変数を参照。 - UdonbehaviorClass_Access: データクラスとして別のUdonbehaviorクラスを作成。
- UdonbehaviorClass_Access2: UdonbehaviorClass_Accessのの内部処理にgetterを追加し、その中で文字列出力を行う。
- List_Access:
DataListを用い、list[0]などのインデックスでデータを参照。 - Dictionary_Access:
DataDictionaryを用い、dict["a"]などのキーでデータを参照。 - MyDarkClass_Access: 闇クラスを使用し、プロパティ
AおよびBにアクセス。 - MyClass_Access: U#1.2の非UdonSharpBehaviourクラスを利用。
- MyClass_Access2: MyClass_Accessの内部処理にgetterを追加し、その中で文字列出力を行う。
| テスト項目 | Median (ms) | Min (ms) | Max (ms) | 相対性能 (%) |
|---|---|---|---|---|
| Variable_Access | 59.2113 | 58.066 | 65.105 | 100.00 |
| UdonbehaviorClass_Access | 139.54925 | 134.638 | 144.867 | 42.43 |
| UdonbehaviorClass_Access2 | 138.11045 | 135.696 | 158.013 | 42.89 |
| List_Access | 97.7863 | 95.907 | 105.921 | 60.55 |
| Dictionary_Access | 124.2012 | 121.536 | 162.402 | 47.67 |
| MyDarkClass_Access | 135.20415 | 132.985 | 143.174 | 43.79 |
| MyClass_Access | 113.73265 | 111.906 | 120.445 | 52.06 |
| MyClass_Access2 | 142.58765 | 136.582 | 198.047 | 41.55 |