これはshownです。キャストはプレフィックスキャストよりもはるかに高速ですが、 '反射'はどうですか?どれくらい悪い?あなたが想像しているように、Googleで 'is'を検索することは非常に効果的ではありません。C#での 'is' reflectionのパフォーマンス特性は何ですか?
答えて
いくつかのオプションがあります:
- 古典的なキャスト:
Foo foo = (Foo)bar
as
キャスト演算子:Foo foo = bar as Foo
is
テスト:bool is = bar is Foo
bar
が安全(クイック)Foo
にキャストした後、実際に(遅い)、それを行うか、(本当に遅い)例外をスローすることが可能かどうかを確認する必要があります古典的なキャスト。bar
をキャストできるかどうかを確認する必要がありますas
オペレータは、その後、キャストを行う、またはそれが安全にキャストできない場合、それはちょうどnull
を返します。is
オペレータは、bar
がFooにキャストできるかどうかを確認して、boolean
を返します。それが唯一のフル鋳造作業の最初の部分を行いますので、
is
テストは、迅速です。 as
演算子は、キャストが失敗した場合に例外をスローしないため、従来のキャストよりも高速です(キャストに失敗すると正当に想定される状況に適しています)。
あなただけの変数bar
あなたはbar
がFoo
であるかどうかをテストするつもりならFoo
は、その後、is
オペレータ、しかしを使用しているかどうかを知る必要がある場合は、そうであれば、はそれをキャストの場合は、as
の演算子を使用してください。
本質的に、キャストが有効であることを保証するために、すべてのキャストは最初に内部でis
のチェックと同等の処理を行う必要があります。したがって、is
チェックの後に完全キャスト(as
キャスト、または古典的キャスト演算子のいずれか)を行うと、is
チェックが2回行われますが、これは若干のオーバーヘッドです。
チェックは最も遅いですが、参照型を返すだけなので、参照型でのキャストは非常に高速です。 –
この1つの答えは、私が考えを得るのを助けました.. – nawfal
"isinst" IL演算子と基本的に同じです。
これは問題ではないほど速くなければなりません。
if (obj is Foo) {
Foo f = (Foo)obj;
f.doSomething();
}
これより遅いです:あなたは十分なオブジェクトの型をチェックしている場合、それはあなたがあなたのデザイン
私は、これはということです学んだ方法を再考する必要があり、パフォーマンスに顕著な影響を作るために
Foo f = obj as Foo;
if (f != null) {
f.doSomething();
}
遅くても問題ありませんか?おそらくそうではありませんが、注意を払うのはとても簡単なことです。
- 1. NSDirectoryEnumeratorのfileAttributesメソッドのパフォーマンス特性は何ですか?
- 2. C#属性PropertyType Reflection
- 3. Reflectionの問題点は何ですか?
- 4. Reflectionのメリットは何ですか?
- 5. `==`と `is`の違いは何ですか?
- 6. F#の `is`はC#のキーワードですか?
- 7. IsAssignableFrom、IsInstanceOfTypeとisキーワードは何ですか?
- 8. "x IS NULL"と "NOT(x IS NOT NULL)"の違いは何ですか?
- 9. PHP:spl_autoload_registerのメリットは何ですか?パフォーマンスは、
- 10. 継承のパフォーマンスへの影響(is-a)とC++での集約(has-a)
- 11. C#では "SKU"(属性)の意味は何ですか?
- 12. UNDOTBS Tablespace is Full何が今ですか?
- 13. Android webviewのパフォーマンスは何ですか?
- 14. NHibernate:脱水特性のエラー - これは一体何ですか?
- 15. Perl CGIとCatalystの違いとパフォーマンスの特徴は何ですか?
- 16. "USB Host support is unavailable"メッセージの根本原因は何ですか?
- 17. C#-DateTimeとのJavaの同等性は何ですか?
- 18. このCコードの脆弱性は何ですか?
- 19. この[オプション(...)] C#属性の意味は何ですか?
- 20. firebugで "this._processor is null"とは何ですか?
- 21. c#、Internal、Reflection
- 22. .NETでのReflectionはどのような用途ですか?
- 23. C#IS文が機能しないのはなぜですか?
- 24. ZonedDateTime is isqual()と一貫性のあるhashCode()ですか?
- 25. JavaScriptで特性をも使用するOOPの良い例は何ですか?
- 26. IS CURLはネットワーキングライブラリですか?
- 27. Reflection/CodeDom/CLRから送信されたクラス名の "1"は何ですか?
- 28. C++のタイプの特性
- 29. Pythonで 'is'演算子は何をしますか?
- 30. jQueryが "$(...)is null"となる原因は何ですか?
'は非常に高速です。 –
私は、日付が重複した質問を閉じる際の唯一の決定要因ではないことを認識していますが、私の質問は他の質問が投稿される前に投稿され、回答されupvotedされました。 _It_は重複したものであり、このものではありません。 –