0

データセットをマージするこれら 2 つの方法に違い (パフォーマンス、オーバーヘッド) はありますか?

MyTypedDataSet aDataSet = new MyTypedDataSet();
aDataSet .Merge(anotherDataSet);
aDataSet .Merge(yetAnotherDataSet);

MyTypedDataSet aDataSet = anotherDataSet;
aDataSet .Merge(yetAnotherDataSet);

あなたはどれをお勧めしますか?

4

3 に答える 3

5

これらの 2 つの行は異なることを行います。

最初のものは新しいセットを作成し、次に 2 番目のセットをそれにマージします。

2 番目のものは、2 番目のセットを指すように ds 参照を設定するため、次のようになります。

MyTypedDataSet ds1 = new MyTypedDataSet();
ds1.Merge(anotherDataSet);
//ds1 is a copy of anotherDataSet
ds1.Tables.Add("test")

//anotherDataSet does not contain the new table

MyTypedDataSet ds2 = anotherDataSet;
//ds12 actually points to anotherDataSet
ds2.Tables.Add("test");

//anotherDataSet now contains the new table

わかりました、あなたが意味したことは次のとおりであると仮定しましょう:

MyClass o1 = new MyClass();
o1.LoadFrom( /* some data */ );

//vs

MyClass o2 = new MyClass( /* some data */ );

次に、前者はデータを入力する前に空のオブジェクトを作成するため、後者の方が優れています。

ただし、空のクラスの初期化に高いコストがかかるか、何度も繰り返されない限り、違いはそれほど重要ではありません。

于 2008-09-11T14:55:23.577 に答える
4

2 番目の例では、新しいデータセットは作成されません。これは、既存のデータセットへの 2 番目の参照にすぎません。

于 2008-09-11T14:56:10.597 に答える
1

Keith の言うことは正しいのですが、この例は単純に選択が不適切だったと思います。一般に、最初から「正しい」オブジェクトに初期化し、あなたの場合のように中間の空のオブジェクトを構築しない方がよいでしょう。2 つの理由:

  1. パフォーマンス。これは明らかです。オブジェクトの作成には時間がかかるため、作成するオブジェクトは少ない方が良いです。
  2. ただし、はるかに重要なのは、意図をより適切に示していることです。通常、ステートレス/空のオブジェクトを作成するつもりはありません。むしろ、何らかの状態またはコンテンツを持つオブジェクトを作成するつもりです。やれ。役に立たない (空のため) 一時ファイルを作成する必要はありません。
于 2008-09-11T14:58:18.187 に答える