Один из основных источников утечки памяти в C / C ++, который эффективно не существует в .Net, - это когда освобождать разделяемую память
Ниже приведен класс Брэда Абрамса по проектированию библиотек классов .NET
"Ну, во-первых, конечно, нет утечек памяти, верно? Нет? Есть утечки памяти? Ну, есть утечки памяти другого типа. Как насчет этого? Итак, тип памяти утечка, которой у нас нет, это то, что в старом мире вы использовали malloc для некоторой памяти, а затем забыли сделать бесплатную или добавить ссылку и забыли сделать релиз или что-то еще в паре. И в новом мире сборщик мусора в конечном итоге владеет всей памятью, и сборщик мусора освободит этот материал, когда больше нет ссылок. Но все еще могут быть утечки, верно? Каковы утечки? Хорошо, если вы сохраните ссылку на этот объект жив, тогда сборщик мусора не может его освободить. Так много раз, что происходит, вы думаете, что избавились от всего этого графа объектов, но есть еще один парень, который держит его со ссылкой, и тогда вы застряли. Сборщик мусора не может освободить это, пока вы не отбросите все ссылки на него.
Другой, я думаю, большой вопрос. Нет проблем с владением памятью. Если вы прочитаете документацию по WIN32 API, вы увидите, хорошо, я сначала выделю эту структуру и передам ее, а затем вы ее заполните, а затем я ее освобожу. Или я сообщу вам размер, и вы выделите его, а затем я освобожу его позже, или вы знаете, что все эти споры идут о том, кому принадлежит эта память и где она должна быть освобождена. И много раз разработчики просто разочаровываются в этом и говорят: «Хорошо, что угодно. Ну, это будет бесплатно, когда приложение закроется », и это не очень хороший план.
В нашем мире сборщик мусора владеет всей управляемой памятью, поэтому нет никаких проблем с владением памятью, независимо от того, создали ли вы ее и передали ее приложению, приложение создает и вы начинаете использовать ее. Нет проблем с этим, потому что нет никакой двусмысленности. Сборщик мусора владеет всем этим.
«
Полная стенограмма