Например, сравните эти два образца:
Код: Выделить всё
DataColumn col = new DataColumn();
col.ColumnName = "Subsite";
dataTable.Columns.Add(col);
col = new DataColumn(); // Re-use the "col" declaration.
col.ColumnName = "Library";
dataTable.Columns.Add(col);
Код: Выделить всё
DataColumn col1 = new DataColumn();
col1.ColumnName = "Subsite";
gridDataTable.Columns.Add(col1);
DataColumn col2 = new DataColumn(); // Declare a new variable instead.
col2.ColumnName = "Library";
gridDataTable.Columns.Add(col2);
Код: Выделить всё
string str;
for (int i = 0; i < 100; i++)
{
str = "This is string #" + i.ToString(); // Re-initialize the "str" variable.
Console.WriteLine(str);
}
Код: Выделить всё
for (int i = 0; i < 100; i++)
{
string str = "This is string #" + i.ToString(); // Declare a new "str" each iteration.
Console.WriteLine(str);
}
Пожалуйста, поправьте меня, если я ошибаюсь.
Когда я объявляю и инициализирую ссылочный тип, например System.String, у меня есть указатель на этот объект, который существует в стеке, и содержимое объекта, которое существует. в куче (доступен только через указатель).
В первом примере цикла кажется, что мы создаем только один указатель, «str», и создаем 100 экземпляров. класса String, каждый из которых существует в куче. На мой взгляд, при проходе по циклу мы просто меняем указатель «str», чтобы он каждый раз указывал на новый экземпляр класса String. Те «старые» строки, на которые больше нет указателя, будут удалены сборщиком мусора, хотя я не уверен, когда это произойдет.
Во втором примере цикла , похоже, что мы создаем 100 указателей в дополнение к созданию 100 экземпляров класса String.
Я не уверен, что происходит с элементами в стеке, которые больше не являются нужен, однако. Я не думал, что сборщик мусора избавился и от этих предметов; возможно, они сразу удаляются из стека, как только вы выходите из их области действия? Даже если это правда, я думаю, что создание только одного указателя и обновление того, на что он указывает, более эффективно, чем создание 100 различных указателей, каждый из которых указывает на уникальный экземпляр.
Я понимаю аргумент «преждевременная оптимизация — это зло», но я всего лишь пытаюсь глубже понять вещи, а не оптимизировать свои программы до смерти.
Подробнее здесь: https://stackoverflow.com/questions/118 ... eclare-new
Мобильная версия