Исправить путь InstallUtil к синтаксису файла?

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

Финализаторы не являются детерминированными деструкторами как в C++. Как другие указали, нет никакой гарантии того, когда это назовут, и действительно если у Вас будет достаточно памяти, если это будет когда-нибудь быть названным.

, Но плохая вещь о финализаторах то, что, как Brian сказал, она вызывает Ваш объект пережить сборку "мусора". Это может быть плохо. Почему?

, Как Вы можете или не можете знать, GC разделяется на поколения - Генерал 0, 1 и 2, плюс "Куча" для больших объектов. Разделение является широким термином - Вы получаете один блок памяти, но существуют указатели того, где Генерал 0 объектов запускаются и заканчиваются.

мыслительный процесс - то, что Вы будете, вероятно, использовать много объектов, которые будут недолгими. Таким образом, это должно быть легким и быстрым, чтобы GC добрался до - Генерал 0 объектов. Таким образом, когда существует давление памяти, первой вещью, которую оно делает, является Генерал 0 наборов.

Теперь, если это не разрешает достаточно давления, то оно возвращается и делает Генерала 1 развертка (восстанавливающий Генерала 0), и затем если все еще достаточно, оно делает Генерала 2 развертки (восстанавливающий Генерала 1 и Генерала 0). Так чистка долговечных объектов может требовать времени и быть довольно дорогой (так как Ваши потоки могут быть приостановлены во время операции).

Это означает это, если Вы делаете что-то вроде этого:

~MyClass() { }

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

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

11
задан Mr. Smith 14 August 2009 в 07:53
поделиться