Разница в инициализации набора данных в C # - PullRequest
0 голосов
/ 11 сентября 2008

Есть ли разница (производительность, издержки) между этими двумя способами инициализации объекта:

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

и

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

Что вы рекомендуете?

Ответы [ 3 ]

5 голосов
/ 11 сентября 2008

Эти две строки делают разные вещи.

Первый создает новый набор, а затем объединяет в него второй набор.

Второй устанавливает ссылку на 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 */ );

Тогда последний лучше, так как первый создает пустой объект перед его заполнением.

Однако, если инициализация пустого класса не требует больших затрат или повторяется много раз, разница не так важна.

4 голосов
/ 11 сентября 2008

Ваш второй пример не создает новый набор данных. Это просто вторая ссылка на существующий набор данных.

1 голос
/ 11 сентября 2008

Хотя Кит прав, я полагаю, пример был просто неудачно выбран. Как правило, лучше инициализировать «правильный» объект с самого начала, а , а не создать промежуточный пустой объект, как в вашем случае. Две причины:

  1. Производительность. Это должно быть очевидно: создание объекта стоит времени, поэтому создание меньшего количества объектов лучше.
  2. Гораздо важнее , тем не менее, в нем лучше указывается ваше намерение . Вы обычно не намереваетесь создавать объекты без состояния / пустые. Скорее, вы намереваетесь создавать объекты с некоторым состоянием или содержанием. Сделай это. Не нужно создавать бесполезный (потому что пустой) временный.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...