0

这两种合并数据集的方式之间是否存在差异(性能、开销)?

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

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

你推荐哪个?

4

3 回答 3

5

这两条线做不同的事情。

第一个创建一个新集合,然后将第二个集合合并到其中。

第二个将 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

您的第二个示例不会创建新数据集。这只是对现有数据集的第二次引用。

于 2008-09-11T14:56:10.597 回答
1

虽然基思是对的,但我想这个例子只是选错了。通常,最好从一开始就初始化为“正确”的对象,而不是像您的情况那样构造一个中间的空对象。两个原因:

  1. 表现。这应该很明显:对象创建需要时间,因此创建更少的对象会更好。
  2. 然而,更重要的是,它更好地说明了您的意图。您通常打算创建无状态/空对象。相反,您打算创建具有某种状态或内容的对象。去做吧。无需创建一个无用的(因为空的)临时。
于 2008-09-11T14:58:18.187 回答