私はそれを構造体として使用すると考えている型を持っています。
- 単一の値を表します
- 不変です
しかし問題は、int のフィールドが 6 つあることです。
では、このタイプにはどのソリューションを使用する必要がありますか?
- 構造体を使い続けますか?
- クラスチェンジ?
- または6つの整数をintの配列にパックして、フィールドが1つだけになるようにします
編集
6 つの整数フィールドを持つ構造体のサイズは 24 バイトで、これを渡すには巨大です。構造体の推奨サイズは 16 バイト以下です
私はそれを構造体として使用すると考えている型を持っています。
しかし問題は、int のフィールドが 6 つあることです。
では、このタイプにはどのソリューションを使用する必要がありますか?
編集
6 つの整数フィールドを持つ構造体のサイズは 24 バイトで、これを渡すには巨大です。構造体の推奨サイズは 16 バイト以下です
それはあなたがそれをどのように使用するかによって異なりますか?
質問で提供された情報だけでは回答するのは困難です。
ボクシング気をつけてね。オブジェクトを期待するメソッドによって構造体が消費される場合、構造体はオブジェクトに強制され、パフォーマンスが低下する可能性があります。
より詳しく説明しているリファレンスがあります。
クラス (#2) にすれば、心配する必要はありません。
6 つの整数の配列 (#3) を使用すると、おそらくコードが読みにくくなります。各 int の説明的な識別子を持つクラスの方がはるかに優れています。
データホルダーが不変になる場合、構造体とクラスの質問は、各インスタンスに存在する参照の平均数に依存する可能性があります。TwentyFourByteStruct [1000]の配列がある場合、すべての要素が異なる値を保持するか、すべての要素が同じ値を保持するか、またはその中間であるかに関係なく、その配列は24,000バイトを使用します。TwentyFourByteClass [1000]の配列がある場合、その配列は4,000または8,000バイト(32/64ビットシステムの場合)を取り、作成されるTwentyFourByteClassの個別のインスタンスはそれぞれ約48バイトを取ります。すべての配列要素がたまたま同じTwentyFourByteClassオブジェクトへの参照を保持している場合、合計は4,048バイトまたは8,048バイトになります。すべての配列要素が異なるTwentyFourByteClassオブジェクトへの参照を保持している場合、合計は52,000または56,000バイトになります。
実行時のパフォーマンスに関しては、通常、参照によって構造を渡すことが最高のパフォーマンスを得ることができます。構造体を値で渡すには、それらをコピーする必要があります。これは、16バイトを超える構造体ではコストがかかる可能性があります(.netには16バイト以下の構造体の最適化が含まれます)が、参照による値型のコストは、1バイトでも1バイトでも同じです。 16,000バイト。
さまざまなオプションのパフォーマンスを測定するための小さなベンチマークを作成することをお勧めします。これが確実に知る唯一の方法です。あなたはその結果に驚くかもしれません (私はしばしばそうです)。
(ここでの懸念はパフォーマンスだと思います。)
構造体を見ないと、断定的に何かを言うのは困難です。しかし、これは構造体のままにしておくべきだと思います。
はどうWriteOnce<int[]>
ですか?
一般に、2 つ以上の関連データを格納する場合は、それらをバインドするクラスを作成するのが好きです。特に私がそれらをユニットとして回している場合。