Есть ли потребность ни на Что установить Объекты в Функциях VBA

Как я сказал в комментарии, вы должны сделать это в одном утверждении:

vm.List = _context.Person
    .Select(p => new IndexListItem
    {
        Name = p.Name,
        Address = p.Address.FirstLine + " " + p.Address.SecondLine,
        ID = p.ID
    }).ToList();

Это имеет два преимущества:

  1. Он переведен на SQL, так что только четыре обязательные поля извлекаются из базы данных (что существенно отличается от более широких записей).
  2. EF будет генерировать SQL, который принимает нулевые значения.

Если вы не хотите, чтобы " " в результате вы могли сделать ...

Address = (p.Address.FirstLine + " " + p.Address.SecondLine).Trim()

... или ...

Address = p.Address.FirstLine != null ? p.Address.FirstLine + " " : "")
    + p.Address.SecondLine

Но я не думаю, что это имеет большое значение для просмотра данных.

62
задан shruti1810 28 May 2015 в 04:49
поделиться

5 ответов

VB использует так называемый сборщик "мусора" "подсчета ссылок".

В основном, момент переменная выходит из объема, ссылочный счетчик на ссылочном объекте постепенно уменьшается. При присвоении ссылки на объект на другую переменную ссылочный счетчик увеличен.

, Когда счетчик достигает нуля, объект готов к сборке "мусора". Объектные средства будут высвобождены, как только это происходит. Функциональная локальная переменная, скорее всего, сошлется на объект, подсчет ссылок которого никогда не повышается, чем 1, таким образом, объектные средства будут высвобождены, когда функция закончится.

Установка переменной к Nothing является способом уменьшить ссылочный счетчик явно.

, Например, Вы читаете в файле и устанавливаете переменную объекта файла на Nothing прямо после эти ReadAll() вызов. Дескриптор файла будет сразу выпущен, можно взять процесс времени его содержание.

, Если Вы не устанавливаете на Nothing, дескриптор файла мог бы быть открыт дольше, чем абсолютно необходимый.

, Если Вы не находитесь в, "должен разблокировать ценный ресурс" вид ситуации, просто позволение переменным выйти из объема хорошо.

73
ответ дан Tomalak 24 November 2019 в 16:48
поделиться

Сборка "мусора" редко прекрасна. Даже в.NET существуют времена, где Вы сильно поощряетесь запросить систему делать сборку "мусора" рано.

поэтому я явно и близкий и набор к Ничто recordsets, когда я сделан с ними.

14
ответ дан BIBD 24 November 2019 в 16:48
поделиться

Ссылки, как предполагается, очищены, когда переменная выходит из объема. По-видимому, это улучшилось с более поздними версиями программного обеспечения, но это было когда-то не надежно. Я полагаю, что остается хорошей практикой ни на "Что" явно устанавливать переменные.

2
ответ дан John Mo 24 November 2019 в 16:48
поделиться

Самая последняя строка темы справки для" 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 переменным выйти из объема, явно не используя Близкий метод. Я не сделал никакого тестирования на нем, но это, кажется, не имеет значения.

13
ответ дан Shane Miskin 24 November 2019 в 16:48
поделиться

Я обычно всегда помещаю это в конец моих процедур или вызываю Подложка "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

Таким образом, однако, процедура завершается (как обычно, так и из-за ошибки), объекты очищаются, а ресурсы освобождаются.

Это довольно безопасно, так как вы можете просто вставить его, и он будет делать только то, что необходимо в отношении закрытия или уничтожения объекта набора записей / соединения, если он уже был закрыт (из-за ошибка времени выполнения или просто закрытие его раньше, чем нужно, это просто гарантирует).

На самом деле это не так уж и сложно, и всегда лучше очистить ваши объекты, когда вы закончите с ними, чтобы немедленно освободить ресурсы, независимо от того, что происходит в программе.

1
ответ дан 24 November 2019 в 16:48
поделиться