Есть ли различия в сборщике мусора для vb.net и c #? - PullRequest
5 голосов
/ 09 марта 2012

Я слышал, что сборщик мусора в c # может быть «более агрессивным», чем его аналог vb.net. Это правда? Есть ли другие различия в том, как сборка мусора выполняется в vb.net против c #?

Ответы [ 5 ]

7 голосов
/ 09 марта 2012

Насколько я понимаю, CLR поддерживает сборку мусора и не зависит от языка.

6 голосов
/ 09 марта 2012

Сборщик мусора в CLR такой же.Разница, на которую ссылаются люди, вероятно, заключается в синтаксисе языков.В VB.NET вы, вероятно, можете иметь языковые структуры, которые заставляют ссылки на объекты неожиданно задерживаться дольше, что приводит к тому, что объекты не имеют GC-права, как это может быть в C #.Это все гипотеза.

5 голосов
/ 09 марта 2012

Сборщик мусора является частью общеязыковой среды выполнения (CLR) и обеспечивает управление памятью на всех языках, использующих CLR - он не зависит от языка.

2 голосов
/ 09 марта 2012

Нет разницы между сборщиком мусора для C # или VB.Это является частью CLR и распространяется на все языки.Однако составляет разницу между сборщиком мусора, работающим на серверах, по сравнению с рабочими станциями.

http://msdn.microsoft.com/en-us/library/ee787088.aspx#workstation_and_server_garbage_collection

1 голос
/ 21 апреля 2012

Сам сборщик мусора такой же. Однако существует разница в способах обработки финализаторов. В vb.net один переопределяет Object.Finalize(), просто объявив Sub Overrides Finalize(). Любой код в этой подпрограмме переопределит Object.Finalize. В C # переопределение Object.Finalize() запрещено. Вместо этого нужно использовать синтаксическую конструкцию, которая по иронии судьбы называется «деструктор» (хотя и предотвращает немедленное уничтожение объекта, когда это было бы иначе), которая переопределяет Finalize() следующим:

override void Finalize(void)
{
  try
  {
    .. supplied code here
  }
  finally
  {
    base.Finalize();
  }
}

Предполагаемая цель языковой конструкции - сделать код финализации независимым от платформы. На практике это просто глупое неудобство, поскольку любой код, который использует финализаторы правильно , должен будет использовать методы, специфичные для платформы, такие как GC.KeepAlive() и GC.SuppressFinalize().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...