参照型が値型よりも効率的な時間はありますか?どうして ?あなたは例を挙げることができますか?C#では、参照型が値型より効率的なのはいつですか?
答えて
いつでも、たくさんのオブジェクトの間を渡します。
値の型を持つメソッドを呼び出すたびに、または別の場所に割り当てられるたびに、値型のメンバーの完全なコピーが必要です。かなりの数のメンバーがいる場合は、パフォーマンスが大幅に低下する可能性があります。例えば
は、あなたが20 int型の値を持つオブジェクトを持っていると言う:
public class MyClass { int a; int b; int c; ... }
public class MyStruct { int a; int b; int c; ... }
我々はこれを行う場合は、次の
MyClass class = new MyClass();
MyClass struct = new MyStruct();
this.CallSomeMethod(class); // Just copies one IntPtr reference!
this.CallSomeMethod(struct); // Needs to copy a large amount of data to run - 20x the other on x86, 10x on x64, since it's 20 Int32 values!
質問には明確な答えを持っているにはあまりにも広いです。あなたが10kオブジェクトを持ち、それを再帰関数に渡す場合の例があります。値の型を使用する場合は、メソッドを呼び出すたびに、全体をコピーします。
値型メンバには、追加レベルの間接化を行わずにアクセスできます。一般的な参照型は良い出発点です。アプリケーションをプロファイルする必要があります。メンバーを参照してパフォーマンスの重大な問題が発生した場合は、設計上適用可能な場合は値型を使用できます。
非常に小さい構造体では、プロファイリングなしの値型を使用できます。特に、あなたのstrctに4バイトの値しか入っていない場合、 64ビットのプラットフォームでは、すべての参照(間接参照)が8バイトのメモリにかかります。今後登場するx64 Windows版では、CPUレジスタに8バイトを格納できることに注意してください。あなたの構造体が8バイトほど小さい場合、それはレジスタに保持することができます。
すでに値の型は値渡しの呼び出しで完全にコピーする必要があることに注意してください。あなたの構造体が8バイトよりもはるかに大きい場合、これはパフォーマンスに大きな影響を与える可能性があります。
効率的で、我々はその後、CPUにあまり指示を意味する場合:
値の型は参照型のデフォルトながら、null参照に、デフォルト値を初期化するデフォルトコンストラクタを持っています。
変更中に、ある値タイプの値を変更しても、別の値タイプには影響しません。参照タイプの値によって、他の参照タイプの値が変更されることがあります。
私は実際にそこに問題がある場合を除き、パフォーマンスよりもセマンティクスについてもっと考えてみます。したがって、値のように動作し、値のセマンティクスを持つものが必要な場合は、構造体を使用します。それ以外の場合は、クラスを使用します。
ほとんどのコードでは、パフォーマンスが問題になるほどオブジェクトが複雑であるように、おそらく価値のセマンティクスを望んでいないと考えられます。
- 1. 値型/参照型制約はいつC#で役に立ちますか?
- 2. C#データ収集vデータベース参照 - より効率的ですか?
- 3. C# - 値型の参照ラッパー
- 4. 値型が参照型から継承するのはなぜですか?
- 5. C#ジェネリックス:参照型と値
- 6. 、参照型対値型の使用は
- 7. 静的ブール値はSwiftの参照型ですか?
- 8. Varまたは動的変数参照型または値型?
- 9. 参照型メンバーを持つC#参照型
- 10. 参照型または値型?
- 11. 値型と参照型
- 12. 参照型と値型であるTに対する一般的な制約はありますか?
- 13. .netフレームワークでの値型と参照型のメモリ割り当て
- 14. C#文字列参照型ですか?
- 15. C#の参照型とrefの違いは何ですか?
- 16. C++ 11はconst参照よりも悪いPOD型の値渡し
- 17. 値型変数のストア参照C#
- 18. 派生参照型へのC#参照型のクローニング
- 19. エラー: 'char'型の一時的な型からの 'char&'型の非const参照の初期化が無効
- 20. 参照型内部.NETの値型
- 21. ボックス型の値型とリフレクションなしの参照型を区別できます
- 22. c - char *配列をint型とfloat型に変換する最も効率的な方法は何ですか?
- 23. 参照型はオブジェクトですか?
- 24. 参照型のメモリとCLRの値型のコストの比較は何ですか?
- 25. rvalue参照でより効率的に戻っていますか?例えば
- 26. C#別の参照型
- 27. C言語の中での参照型
- 28. forループはC++でより効率的ですか?職場で
- 29. 「論理型」型のサブセット化が「数値型」型のサブセット化より遅いのはなぜですか?
- 30. C#対話型ウィンドウでコードが参照されない
どのように効率的ですか? –
この質問はあまりにも開いている。より具体的なものは何か、または記事にはこれを参照するものがありますか? – snarf
効率的には、少ないメモリ、処理能力、またはその両方を使用するかどうかにかかわらず、パフォーマンスが向上することを意味します。 Jon Skeetの "C Sharp in depth"という本の第2章で読みましたが、理由を理解できませんでしたので、私はここで質問する必要があります。 – bluediapente