Вопрос

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

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

и

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

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

Это было полезно?

Решение

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

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

Другие советы

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top