2012-05-12 12 views
-2

リストまたは配列に複数の値を格納する必要があります。このようなオブジェクトの型を持つ配列を宣言し複数の異なる型を持つ値のリスト/配列

オプション1:これらの値は、日時などの文字列、int型、などの複数のタイプ

私は2つのオプションがあります

object[] values; 

オプション2:

インターフェイスの配列を宣言し、保持する各タイプの独自のクラスを実装します。

interface IType 
{ 
} 

IType[] values; 

class StringValue : IType 
{ 
    public string StringValue { get; set; } // not declared in interface! 
} 

class IntValue : IType 
{ 
    public int IntValue { get; set; } // not declared in interface! 
} 

質問:

パフォーマンスの向上および/または各実装オプションの影響は何ですか?私が知る限り(またはquessing)、object[]を使用すると、boxinq自身のパフォーマンスに影響があります。

オプション2はどうですか?少なくとも

私は本当にのようなものを考える必要がありますobject[]を使用してパフォーマンスに非常に大きな影響があるの...第1のタイプはITypeがSTRINGVALUEまたはIntValueなどにキャストしなければならない、決定しなければならない、StringValueまたはIntValueプロパティは多くのコードを必要とする使用してオプション2?

+3

パフォーマンスを気にする前に、コードを実装して書き、テストテストをテストし、パフォーマンスが問題であるかどうかを確認してから、必要に応じて最適化することができます** –

+0

もちろんです!私はすでにオプション1を実装していました。私は知っていたので(計量されていませんでした)、いくつかの問題が生じるでしょう。たぶん質問は、オプション1よりも良いかもしれないことをもっと尋ねる方がいいでしょう。 – Harza

+0

"より良い"を求めることは助けにはならないでしょう - あなたはどんな意味でより明確にする必要があります。 – Oded

答えて

1

クラスIntValueあなたは本質的にボックスに整数を指定します。それはオブジェクトに参加することができるようにオブジェクトにカプセル化します。私はそのシナリオでは、パフォーマンスが改善と期待して、あなたの実装に応じて、それはコンパイラ実装のボクシングより悪化する可能性があります。

あなたの努力がコードの他の領域を改善することに重点を置いているとコメントすることに同意します。ボクシングのオーバーヘッドが注目の最も重要な領域になるシナリオはごくわずかです。

ボクシングがユーザーエクスペリエンスに重要だったシナリオ(int、float、またはdoubleになる可能性のある多数の数値を扱う)に遭遇しました。私はそれを解決したusing expression trees

+0

そのインタフェースモデルの利点の1つは、配列に 'ints'、' strings'、 'datetimes'、またはインタフェースを実装する他のクラス(内部の場合は、既知の有限量になります)しか持たないことを保証することです。 'object'を使うと本当に何でも構いません。 – Servy

+0

真ですが、インターフェイスにはタイプごとに1つのメンバーがあります。これは実際には通常の意味でのインターフェースではありません(複数の実装に対する1つのインターフェース)。その利点を得るために共通の基本タイプから派生することもあります。 –

+0

ありがとうございました。私もこれを見つけたhttp://social.msdn.microsoft.com/forums/en-US/csharpgeneral/thread/808ad927-385f-49c9-aace-256eefe659d7 – Harza

0

パフォーマンスにはあまり影響がないと思います。 object [] _objectsを使用すると、オブジェクトのタイプを見つけるために使用されるリフレクションが少し遅くなる可能性があります。 .GetType()関数。

関連する問題