Как я сказал в комментарии, вы должны сделать это в одном утверждении:
vm.List = _context.Person
.Select(p => new IndexListItem
{
Name = p.Name,
Address = p.Address.FirstLine + " " + p.Address.SecondLine,
ID = p.ID
}).ToList();
Это имеет два преимущества:
Если вы не хотите, чтобы " "
в результате вы могли сделать ...
Address = (p.Address.FirstLine + " " + p.Address.SecondLine).Trim()
... или ...
Address = p.Address.FirstLine != null ? p.Address.FirstLine + " " : "")
+ p.Address.SecondLine
Но я не думаю, что это имеет большое значение для просмотра данных.
VB использует так называемый сборщик "мусора" "подсчета ссылок".
В основном, момент переменная выходит из объема, ссылочный счетчик на ссылочном объекте постепенно уменьшается. При присвоении ссылки на объект на другую переменную ссылочный счетчик увеличен.
, Когда счетчик достигает нуля, объект готов к сборке "мусора". Объектные средства будут высвобождены, как только это происходит. Функциональная локальная переменная, скорее всего, сошлется на объект, подсчет ссылок которого никогда не повышается, чем 1, таким образом, объектные средства будут высвобождены, когда функция закончится.
Установка переменной к Nothing
является способом уменьшить ссылочный счетчик явно.
, Например, Вы читаете в файле и устанавливаете переменную объекта файла на Nothing
прямо после эти ReadAll()
вызов. Дескриптор файла будет сразу выпущен, можно взять процесс времени его содержание.
, Если Вы не устанавливаете на Nothing
, дескриптор файла мог бы быть открыт дольше, чем абсолютно необходимый.
, Если Вы не находитесь в, "должен разблокировать ценный ресурс" вид ситуации, просто позволение переменным выйти из объема хорошо.
Сборка "мусора" редко прекрасна. Даже в.NET существуют времена, где Вы сильно поощряетесь запросить систему делать сборку "мусора" рано.
поэтому я явно и близкий и набор к Ничто recordsets, когда я сделан с ними.
Ссылки, как предполагается, очищены, когда переменная выходит из объема. По-видимому, это улучшилось с более поздними версиями программного обеспечения, но это было когда-то не надежно. Я полагаю, что остается хорошей практикой ни на "Что" явно устанавливать переменные.
Самая последняя строка темы справки для" Recordset. Близко " в справке Microsoft DAO и Ссылке Разработчика Доступа это:
"Альтернатива Близкому методу должна установить значение переменной объекта ни к Чему (Набор dbsTemp = Ничто)".
http://msdn.microsoft.com/en-us/library/bb243098.aspx
, Имея это в виду эта статья от Microsoft Knowledge Base, наделенного правом, "Как предотвратить чрезмерное увеличение размера базы данных после использования Объектов доступа к данным (DAO)", говорит Вы, что необходимо явно закрыться, если Вы не хотите, чтобы Ваши базы данных чрезмерно увеличились в размерах. Вы заметите, что статья немного неопределенна о деталях; раздел "Cause" неясен, почти на грани того, чтобы быть мусором.
http://support.microsoft.com/kb/289562
ПРИЗНАКИ: База данных Microsoft Access начала чрезмерно увеличиваться в размерах (или вырасти быстро в размере) после реализации Объектов доступа к данным (DAO) для открытия recordset.
ПРИЧИНА: Если Вы не освобождаете память recordset каждый раз, когда Вы циклично выполняетесь через код recordset, ДАО может перекомпилировать, с помощью большей памяти и увеличив размер базы данных.
[еще 1113] ИНФОРМАЦИЯ: Когда Вы создаете Recordset (или QueryDef) объект в коде, явно закрываете объект, когда Вы закончены. Microsoft Access автоматически закрывает объекты Recordset и QueryDef при большинстве обстоятельств. Однако при явном закрытии объекта в коде можно избежать случайных экземпляров, когда объект остается открытым.
Наконец, позвольте мне добавить, что я работал с базами данных Access в течение 15 лет, и я почти всегда позволяю своим локально заявленным recordset переменным выйти из объема, явно не используя Близкий метод. Я не сделал никакого тестирования на нем, но это, кажется, не имеет значения.
Я обычно всегда помещаю это в конец моих процедур или вызываю Подложка "CloseRecordSet" с ним, если я использую единицы уровня модуля:
Private Sub Rawr()
On Error GoTo ErrorHandler
'Procedural Code Here.
ExitPoint:
'Closes and Destroys RecordSet Objects.
If Not Recset Is Nothing Then
If Recset.State = 1 Then
Recset.Close
Conn.Close
End If
Set Recset = Nothing
Set Conn = Nothing
End If
Exit Sub
ErrorHandler:
'Error Handling / Reporting Here.
Resume ExitPoint
End Sub
Таким образом, однако, процедура завершается (как обычно, так и из-за ошибки), объекты очищаются, а ресурсы освобождаются.
Это довольно безопасно, так как вы можете просто вставить его, и он будет делать только то, что необходимо в отношении закрытия или уничтожения объекта набора записей / соединения, если он уже был закрыт (из-за ошибка времени выполнения или просто закрытие его раньше, чем нужно, это просто гарантирует).
На самом деле это не так уж и сложно, и всегда лучше очистить ваши объекты, когда вы закончите с ними, чтобы немедленно освободить ресурсы, независимо от того, что происходит в программе.