C# における DataSet 初期化の違い
-
09-06-2019 - |
質問
オブジェクトを初期化する次の 2 つの方法に違い (パフォーマンス、オーバーヘッド) はありますか?
MyTypedDataSet aDataSet = new MyTypedDataSet();
aDataSet .Merge(anotherDataSet);
aDataSet .Merge(yetAnotherDataSet);
そして
MyTypedDataSet aDataSet = anotherDataSet;
aDataSet .Merge(yetAnotherDataSet);
どれをお勧めしますか?
解決
キースの言うことは正しいですが、私はこの例の選択が単に間違っていたのだと思います。一般に、最初から「正しい」オブジェクトに初期化することをお勧めします。 ない あなたの場合と同様に、中間の空のオブジェクトを構築します。2 つの理由:
- パフォーマンス。これは明らかです。オブジェクトの作成には時間がかかるため、作成するオブジェクトの数は少ない方が良いです。
- 多くの ただし、より重要なのは、あなたのことをよりよく表現することです 意図. 。あなたは一般的にそうします ない ステートレス/空のオブジェクトを作成するつもりです。むしろ、何らかの状態またはコンテンツを持つオブジェクトを作成することを目的としています。やれ。役に立たない (空であるため) 一時ファイルを作成する必要はありません。
他のヒント
これら 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 */ );
前者はデータを設定する前に空のオブジェクトを作成するため、後者の方が優れています。
ただし、空のクラスの初期化にコストがかかる場合や、何度も繰り返される場合を除き、違いはそれほど重要ではありません。
2 番目の例では、 ない 新しいデータセットを作成します。ほんの一瞬です 参照 既存のデータセットに。
所属していません StackOverflow