Объявление ограничения по умолчанию при составлении таблицы

IDisposable не имеет никакого отношения к памяти освобождения. IDisposable является шаблоном для освобождения неуправляемый , ресурсы - и память являются вполне определенно управляемым ресурсом.

ссылки, указывающие на GC.Collect (), являются корректным ответом, хотя использованию этой функции обычно препятствует документация Microsoft.NET.

Редактирование: зарабатывавший значительное количество кармы для этого ответа, я чувствую определенную обязанность уточнить его, чтобы вновь прибывший к управлению ресурсами.NET не получает неправильное впечатление.

Внутренняя часть процесс.NET, существует два вида ресурса - управляются и неуправляемы. "Управляемый" означает, что время выполнения управляет ресурсом, в то время как "неуправляемый" средства, что это - ответственность программиста. И действительно существует только один вид управляемого ресурса, о котором мы заботимся в.NET сегодня - память. Программист говорит времени выполнения выделять память, и после этого это до времени выполнения для выяснения, когда память может освобожденный. Механизм, которым использование.NET с этой целью называют сборка "мусора" и можно найти много информации о GC в Интернете просто при помощи Google.

Для других видов ресурсов.NET ничего не знает о чистке их так, это должно полагаться на программиста, чтобы сделать правильную вещь. С этой целью платформа дает программисту три инструмента:

  1. интерфейс IDisposable и оператор "использования" в VB и финализаторах C#
  2. шаблон IDisposable, как реализовано многими классами BCL

первый из них позволяет программисту эффективно получать ресурс, использовать его и затем выпускать все это в рамках того же метода.

using (DisposableObject tmp = DisposableObject.AcquireResource()) {
    // Do something with tmp
}
// At this point, tmp.Dispose() will automatically have been called
// BUT, tmp may still a perfectly valid object that still takes up memory

, Если "AcquireResource" является методом фабрики, который (например), открывает файл и "Располагает" автоматически, закрывает файл, тогда этот код не может пропустить ресурс файла. Но память для самого объекта "tmp" может все еще быть выделена. Поэтому интерфейс IDisposable не имеет абсолютно никакого соединения со сборщиком "мусора". Если Вы сделали , хотят гарантировать, что память была освобождена, Ваша единственная опция будет состоять в том, чтобы звонить GC.Collect() для принуждения сборки "мусора".

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

, Что происходит, если ресурс используется в течение более длительного промежутка времени, такого, что его продолжительность жизни пересекает несколько методов? Очевидно, оператор "использования" больше не применим, таким образом, программист должен был бы вручную звонить, "Располагают", когда он сделан с ресурсом. И что происходит, если программист забывает? Если нет никакой нейтрализации, то процесс или компьютер могут в конечном счете исчерпать, какой бы ни ресурс правильно не освобождается.

Это - то, где финализаторы входят. Финализатор является методом на Вашем классе, который имеет особые отношения со сборщиком "мусора". GC обещает, что - прежде, чем освободить память для любого объекта того типа - он сначала даст финализатору шанс сделать некоторую очистку.

Так в случае файла, мы теоретически не должны закрывать файл вручную вообще. Мы можем просто ожидать, пока сборщик "мусора" не добирается до него, и затем позвольте финализатору сделать работу. К сожалению, это не работает хорошо на практике, потому что сборщик "мусора" работает недетерминировано. Файл может остаться открытым значительно дольше, чем программист ожидает. И если достаточно файлов сохранено открытым, система может перестать работать при попытке открыть дополнительный файл.

Для большинства ресурсов, мы хотим обе из этих вещей. Мы хотим соглашение быть в состоянии сказать, что "мы сделаны с этим ресурсом теперь", и мы хотим удостовериться, что существует, по крайней мере, некоторый шанс для очистки для случая автоматически, если мы забываем делать это вручную. Это - то, где шаблон "IDisposable" играет роль. Это - соглашение, которое позволяет IDispose и финализатору играть приятно вместе. Вы видите, как шаблон работает путем рассмотрения официальная документация для IDisposable.

Нижняя строка: , Если то, что Вы действительно хотите сделать, должно просто удостовериться, что память освобождена, тогда IDisposable и финализаторы не помогут Вам. Но интерфейс IDisposable является частью чрезвычайно важного шаблона, который должны понять все программисты.NET.

97
задан 3 revs, 2 users 97% 16 January 2017 в 16:09
поделиться

1 ответ

Сделайте это в строке с созданием столбца:

[load_date] SMALLDATETIME NOT NULL
        CONSTRAINT [df_load_date] DEFAULT GETDATE()

Я использовал квадратные скобки, а не кавычки, так как многие программы чтения не будут работать с QUOTED_IDENTIFIERS по умолчанию. ]

173
ответ дан 24 November 2019 в 05:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: