Differenza nell'inizializzazione del set di dati in C#
-
09-06-2019 - |
Domanda
Esiste una differenza (prestazioni, sovraccarico) tra questi due modi di inizializzare un oggetto:
MyTypedDataSet aDataSet = new MyTypedDataSet();
aDataSet .Merge(anotherDataSet);
aDataSet .Merge(yetAnotherDataSet);
E
MyTypedDataSet aDataSet = anotherDataSet;
aDataSet .Merge(yetAnotherDataSet);
Quale consigli?
Soluzione
Anche se Keith ha ragione, suppongo che l'esempio sia stato semplicemente scelto male.In generale, è meglio inizializzare l'oggetto “giusto” dall'inizio e non costruisci un oggetto intermedio e vuoto come nel tuo caso.Due ragioni:
- Prestazione.Questo dovrebbe essere ovvio:La creazione di oggetti costa tempo, quindi creare meno oggetti è meglio.
- Tanto ancora più importante, tuttavia, afferma meglio il tuo intento.In genere lo fai non intendono creare oggetti senza stato/vuoti.Piuttosto, intendi creare oggetti con uno stato o un contenuto.Fallo.Non c'è bisogno di creare un temporaneo inutile (perché vuoto).
Altri suggerimenti
Queste due linee fanno cose diverse.
Il primo crea un nuovo set e poi vi unisce un secondo set.
Il secondo imposta il riferimento ds in modo che punti al secondo set, quindi:
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, supponiamo che quello che intendevi fosse:
MyClass o1 = new MyClass();
o1.LoadFrom( /* some data */ );
//vs
MyClass o2 = new MyClass( /* some data */ );
Allora è meglio quest'ultimo, poiché il primo crea un oggetto vuoto prima di popolarlo.
Tuttavia, a meno che l'inizializzazione di una classe vuota non abbia un costo elevato o venga ripetuta un gran numero di volte, la differenza non è così importante.
Il tuo secondo esempio sì non creare un nuovo set di dati.È solo un secondo riferimento a un set di dati esistente.