2009-03-04 8 views
1

いくつかのクラスに対して新しいオブジェクトを作成したい場合、すでにクラスがある場合は、clone()を使用するか、newキーワードを使用してインスタンス化する必要がありますか?新しいキーワードを使用して、パフォーマンス(clone()またはインスタンス化)が改善されましたか?

はい、clone()にもすべてのメンバーがコピーされますが、これは問題ではない場合があります。私は実際にUIのために使用される前の回で巨大な取得し、「n」の階層を通過しているジェネリックリスト(一覧< T >)、で働いていると私は私の現在の仕事の一つにこれを必要と

ClassType foo = new ClassType(); 
ClassType bar = new ClassType(); // here, will foo.clone() be better choice? 

(それらの間で、Arrayに変換され、シリアル化目的でリストに戻されます)。だから、私はパフォーマンスを良くすることを考えていただけです。

+0

IListをクローンしていますか??またはいくつかのプレーンなC#型? –

+0

私はジェネリックリストをクローンしていません、私は自分のオブジェクトをリストに追加しています。それが私の質問の中心です。 –

+0

あなたは浅いか深いクローンが欲しいですか? (http://msdn.microsoft.com/en-us/library/system.icloneable.clone.aspx) –

答えて

5

早すぎる最適化をしているようです。プロフィール、あなたは通常、時間がどこに行くのか驚いています。あなたの "クローン"がシリアライゼーションを使用していない限り、私はそれがここにあるとは思わない。

それは言った。 ICloneable.Clone()は、それがあまり定義されておらず(深い対浅い)、めったにサポートされていないため単純に避ける価値があります。背後では、ほとんどのClone()実装はnew(); // now copy propertiesを実行するか、またはシリアライゼーションを使用します。

1

。クローンは間違いなく遅いです。

7

Clone()は、とにかくnewを行うので、どうして気になるのですか?

Clone()を呼び出すと、新しい参照が作成され、その上にすべてのメンバーがコピーされるため、間違いなく遅くなります。

1

クローンは、バックグラウンドでオブジェクトを新しくしなければならず、通常のクローンの任務に加えて、新しいものが想像しています。

いつものように、疑問があれば、プロフィール!

2

cloneは、新しいオブジェクト(つまり、newをどこかに呼び出します)を割り当てる必要があります。そのため、パフォーマンスは向上しません。言い換えれば、newのパーフォレーションは、cloneのパフォーマンスの下限です。

1

これはコンストラクタでどのくらいの作業が行われるかによって異なります。 Clone()は、すべてのメンバ値をファーストクラスからセカンダリにコピーします。あなたのコンストラクタは、それより多くの、または少ない仕事をしますか?それに対する答えはあなたに伝えるべきです。

3

クローニングとは、無関係なクラスインスタンスをインスタンス化するだけの、新しいものとは異なる目的と同じ、多かれ少なかれ深いものから浅いものまでのオブジェクトを元のものにすることを意図しています。

要約:これらは異なる目的を果たしますが、互換性はありません。

+0

はい、意味があります。 –

関連する問題