Diferença na inicialização do DataSet em C#
-
09-06-2019 - |
Pergunta
Existe alguma diferença (desempenho, sobrecarga) entre essas duas formas de inicializar um objeto:
MyTypedDataSet aDataSet = new MyTypedDataSet();
aDataSet .Merge(anotherDataSet);
aDataSet .Merge(yetAnotherDataSet);
e
MyTypedDataSet aDataSet = anotherDataSet;
aDataSet .Merge(yetAnotherDataSet);
Qual você recomenda?
Solução
Embora Keith esteja certo, suponho que o exemplo foi simplesmente mal escolhido.Geralmente, é melhor inicializar com o objeto “certo” desde o início e não construa um objeto intermediário e vazio como no seu caso.Duas razões:
- Desempenho.Isso deveria ser óbvio:A criação de objetos custa tempo, portanto, criar menos objetos é melhor.
- Muito mais importante, no entanto, afirma melhor o seu intenção.Você geralmente faz não pretende criar objetos sem estado/vazios.Em vez disso, você pretende criar objetos com algum estado ou conteúdo.Faça isso.Não há necessidade de criar um temporário inútil (porque vazio).
Outras dicas
Essas duas linhas fazem coisas diferentes.
O primeiro cria um novo conjunto e depois mescla um segundo conjunto nele.
O segundo define a referência ds para apontar para o segundo conjunto, então:
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
Ok, vamos supor que o que você quis dizer foi:
MyClass o1 = new MyClass();
o1.LoadFrom( /* some data */ );
//vs
MyClass o2 = new MyClass( /* some data */ );
Então o último é melhor, pois o primeiro cria um objeto vazio antes de preenchê-lo.
No entanto, a menos que inicializar uma classe vazia tenha um custo alto ou seja repetido um grande número de vezes, a diferença não é tão importante.
Seu segundo exemplo faz não crie um novo conjunto de dados.É só um segundo referência para um conjunto de dados existente.