C#中DataSet初始化的差异

时间:2008-09-11 14:54:08

标签: c# object initialization dataset

这两种初始化对象的方法之间是否存在差异(性能,开销):

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

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

你推荐哪一个?

3 个答案:

答案 0 :(得分: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 */ );

然后后者更好,因为前者在填充之前创建了一个空对象。

然而,除非初始化空课程成本高或重复多次,否则差异并不重要。

答案 1 :(得分:4)

您的第二个示例创建新数据集。它只是现有数据集的第二个引用

答案 2 :(得分:1)

虽然基思是对的,但我认为这个例子很糟糕。通常,最好从头开始初始化为“右”对象,而构造一个中间的空对象,就像你的情况一样。有两个原因:

  1. 性能。这应该是显而易见的:对象创建需要花费时间,因此创建更少的对象会更好。
  2. 然而,
  3. 很多更重要,它更好地陈述您的意图。您通常打算创建无状态/空对象。相反,您打算创建具有某些状态或内容的对象。做吧。无需创建无用的(因为空的)临时。