3

私はそれを構造体として使用すると考えている型を持っています。

  • 単一の値を表します
  • 不変です

しかし問題は、int のフィールドが 6 つあることです。

では、このタイプにはどのソリューションを使用する必要がありますか?

  1. 構造体を使い続けますか?
  2. クラスチェンジ?
  3. または6つの整数をintの配列にパックして、フィールドが1つだけになるようにします

編集

6 つの整数フィールドを持つ構造体のサイズは 24 バイトで、これを渡すには巨大です。構造体の推奨サイズは 16 バイト以下です

4

7 に答える 7

5

それはあなたがそれをどのように使用するかによって異なりますか?

  1. 大量に割り当てるか、大量に渡すか。
  2. サードパーティのコードによって消費されますか? この場合、通常、クラスを使用すると柔軟性が向上します。
  3. 構造体とクラスのセマンティクスが必要ですか? たとえば、null 非許容ですか?
  4. 特殊なケースを表すために再利用できる、このクラスの事前に作成されたインスタンスをいくつか用意することでメリットがありますか? String.Empty に似ています。この場合、クラスの恩恵を受けるでしょう。

質問で提供された情報だけでは回答するのは困難です。

于 2009-01-04T07:51:00.147 に答える
1

ボクシング気をつけてね。オブジェクトを期待するメソッドによって構造体が消費される場合、構造体はオブジェクトに強制され、パフォーマンスが低下する可能性があります。

より詳しく説明しているリファレンスがあります。

クラス (#2) にすれば、心配する必要はありません。

6 つの整数の配列 (#3) を使用すると、おそらくコードが読みにくくなります。各 int の説明的な識別子を持つクラスの方がはるかに優れています。

于 2009-01-04T08:13:38.353 に答える
0

データホルダーが不変になる場合、構造体とクラスの質問は、各インスタンスに存在する参照の平均数に依存する可能性があります。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バイト。

于 2011-10-06T16:38:50.877 に答える
0

さまざまなオプションのパフォーマンスを測定するための小さなベンチマークを作成することをお勧めします。これが確実に知る唯一の方法です。あなたはその結果に驚くかもしれません (私はしばしばそうです)。

(ここでの懸念はパフォーマンスだと思います。)

于 2010-06-30T19:36:03.163 に答える
0

構造体を見ないと、断定的に何かを言うのは困難です。しかし、これは構造体のままにしておくべきだと思います。

于 2009-01-04T07:40:13.007 に答える
0

はどうWriteOnce<int[]>ですか?

于 2009-01-04T07:44:35.200 に答える
-1

一般に、2 つ以上の関連データを格納する場合は、それらをバインドするクラスを作成するのが好きです。特に私がそれらをユニットとして回している場合。

于 2009-01-04T09:04:12.060 に答える