C# の "as" 演算子と Nullable 型による予期しないパフォーマンスの違い
C# の "as" 演算子は、型チェックと動的キャストを行います。 null 許容型で "as" を使用すると、従来の "is" 演算子やキャストよりもパフォーマンスが向上するように思えるかもしれませんが、最近のテストで驚くべき結果が明らかになりました。
オブジェクト配列に混合が含まれるテスト シナリオでは整数、文字列、および null 参照の場合、「as」演算子は「is」演算子に比べてパフォーマンスが大幅に低下します。 "as" 演算子による型チェックと値チェックの組み合わせは、動的型を 2 回クエリするよりも効率的であると考えられていたため、これは予想外でした。
null 許容型に対する "isinst" の .NET 実装を分析すると、次のことが明らかになります。特に遅いわけではないということ。むしろ、この問題は、null 許容型で "as" を使用するときに必要な追加のアンボックス化手順に起因しているようです。
JIT コンパイラーは、"is" 演算子および null 非許容型のキャスト用に高度に最適化されたコードを生成できます。ただし、null 許容型の "as" では、ボックス化解除と Nullable
"OfType()" とジェネリック型へのキャストを使用する LINQ ソリューションも、よりパフォーマンスが悪くなります。 「is」演算子。これは、Nullable
結論として、「as」演算子は便利な構文を提供しますが、必ずしもそうであるとは限りません。 null 許容型を操作するときに最高のパフォーマンスを提供します。パフォーマンスが重要なシナリオでは、「is」演算子を使用し、目的の型に直接キャストすることをお勧めします。
以上がC# の 'as' 演算子が null 許容型の 'is' よりも遅いのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。