コードインスペクション:マネージドメソッドへのアクセスはサポートされていません
このインスペクションは、 バーストコンパイラー(英語)によってコンパイルされたコンテキスト内で、管理対象メソッド (通常は System.Object または System.ValueType に属するメソッド) への呼び出しを識別します。 Burst は、C# の高性能かつ限定されたサブセットを対象としているため、ボクシング、参照型、その他の管理対象動作を伴うほとんどのメソッドはサポートしていません。
仕組み
アナライザーは、Burst でコンパイルされたコード内のメソッド呼び出し(IInvocationExpression )を監視します。 呼び出しが禁止されているかどうかは、以下のルールに基づいて判断します。
禁止事項:
System.Object(ToString、GetType、Equalsなど)またはSystem.ValueTypeに直接属するメソッドは、ボックス化を必要とする場合や、管理対象ヒープとやり取りする場合が多いため、一般的に禁止されています。例外 (GetHashCode): 構造体内で
GetHashCodeを呼び出すことは、ボクシングが発生しない場合に限り許可されます。 オーバーライドされた構造体内でbase.GetHashCode()を呼び出す場合、マネージド実装に到達すると依然として問題があります。オーバーライド: 構造体が
Equals(object)のようなメソッドをオーバーライドしている場合、objectパラメーター自体がボクシングを強制するため、Burst 内でそのメソッドを呼び出すことは禁止されています。
このインスペクションは、コードが [BurstCompile] 属性でマークされたメソッドまたはジョブ内にある場合にのみトリガーされます。
サンプル
この例では、Burst コンパイルされたジョブ内で、整数に対して ToString() メソッドと GetType() メソッドが呼び出されています。 これらの呼び出しはサポートされていないため、エラーとして検出されます。