-2

しばらくの間、リストまたは配列に複数の値を格納する必要があります。これらの値は、string、int、datetimeなどの複数のタイプです。

私には2つの選択肢があります:

オプション1:

次のようなオブジェクトのタイプで配列を宣言します。

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!
}

質問:

各実装オプションのパフォーマンス上の利点や影響は何ですか?私が知る限り(または質問する)、boxinqはを使用するときに独自のパフォーマンスに影響を与えobject[]ます。

オプション2はどうですか?少なくとも使用StringValueまたはIntValueプロパティにはより多くのコードが必要です。最初のタイプを決定し、ITypeStringValueまたはIntValueなどにキャストする必要があります。

使用するパフォーマンスに大きな影響があるのでobject[]、オプション2のようなものを本当に考える必要がありますか?

4

2 に答える 2

1

あなたが提案するクラスIntValueは本質的に整数をボックス化します...それはobject[]に参加できるようにそれをオブジェクトにカプセル化します。そのシナリオではパフォーマンスの向上はないと思います。実装によっては、コンパイラーで実装されたボクシングよりも悪い場合があります。

そうは言っても、私はあなたの努力がおそらくあなたのコードの他の領域を改善することにもっと焦点を合わせているというコメントに同意します。ボクシングのオーバーヘッドが最も重要な注意領域となるシナリオはほとんどありません。

私は、ボクシングがユーザーエクスペリエンスにとって重要であるシナリオ(int、float、またはdoubleである可能性のある多くの数値を処理する)に遭遇しました。式ツリーを使用してそれを解決しました。

于 2012-05-12T17:41:14.890 に答える
0

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

于 2012-05-12T17:42:06.753 に答える