C#中数据集初始化的差异
时间:2020-03-05 18:51:32 来源:igfitidea点击:
这两种初始化对象的方式之间是否有区别(性能,开销):
MyTypedDataSet aDataSet = new MyTypedDataSet(); aDataSet .Merge(anotherDataSet); aDataSet .Merge(yetAnotherDataSet);
和
MyTypedDataSet aDataSet = anotherDataSet; aDataSet .Merge(yetAnotherDataSet);
我们推荐哪个?
解决方案
回答
这两行做不同的事情。
第一个创建一个新集合,然后将第二个集合合并到其中。
第二组将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 */ );
那么后者更好,因为前者在填充之前会创建一个空对象。
但是,除非初始化一个空类,否则代价高昂或者被重复了很多次,那么区别就不是那么重要。
回答
第二个示例未创建新的数据集。这只是对现有数据集的第二次引用。
回答
尽管基思(Keith)是对的,但我想这个例子被错误地选择了。通常,最好从头开始初始化为正确的对象,而不是像我们这样构造中间的空对象。两个原因:
- 表现。这应该很明显:对象创建会花费时间,因此创建更少的对象会更好。
- 但是,更重要的是,它可以更好地说明意图。我们通常不打算创建无状态/空对象。相反,我们打算创建具有某些状态或者内容的对象。做吧无需创建无用的(因为为空)临时文件。