【问题标题】:Differences Between DataSet Merges数据集合并之间的差异
【发布时间】:2010-09-08 13:52:00
【问题描述】:

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

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

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

你推荐哪个?

【问题讨论】:

  • 标题完全错误——这不是关于对象初始化的问题,这是关于 DataSet.Merge 方法的问题

标签: c# object initialization dataset


【解决方案1】:

这两行做不同的事情。

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

第二个设置 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】:

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

    1. 性能。这应该很明显:创建对象需要时间,因此创建更少的对象会更好。
    2. 更重要的是,它更好地说明了您的意图。您通常打算创建无状态/空对象。相反,您打算创建具有某种状态或内容的对象。去做吧。无需创建无用(因为为空)临时。

    【讨论】:

    • 另外,对于某些情况(但不是示例),如果您在创建时完全初始化对象,则该对象可以是不可变的。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-05
      • 2019-03-31
      • 1970-01-01
      • 2021-07-25
      • 1970-01-01
      相关资源
      最近更新 更多