Хотя я понимаю серьезные последствия игры с этой функцией (или, по крайней мере, я так думаю), я не понимаю, почему она становится одной из тех вещей, которые уважаемые программисты никогда бы не использовали, даже те, кто даже не знает для чего это нужно.
Скажем, я разрабатываю приложение, в котором использование памяти сильно различается в зависимости от того, что делает пользователь. Жизненный цикл приложения можно разделить на два основных этапа: редактирование и обработка в реальном времени. На этапе редактирования предположим, что созданы миллиарды или даже триллионы объектов; некоторые из них маленькие, а некоторые нет, некоторые могут иметь финализаторы, а некоторые нет, и предположим, что их время жизни варьируется от нескольких миллисекунд до долгих часов. Затем пользователь решает перейти в режим реального времени. На этом этапе предположим, что производительность играет фундаментальную роль, и малейшее изменение в потоке программы может привести к катастрофическим последствиям. Затем создание объектов сокращается до минимально возможного за счет использования пулов объектов и тому подобного, но затем GC неожиданно звонит и отбрасывает все это, и кто-то умирает.
Вопрос: не стоит ли в этом случае вызывать GC.Collect () перед переходом на второй этап?
В конце концов, эти два этапа никогда не пересекаются друг с другом во времени, и вся оптимизация и статистика, которые мог бы собрать сборщик мусора, были бы здесь бесполезны ...
Примечание. Как отметили некоторые из вас, .NET может быть не лучшей платформой для такого приложения, но это выходит за рамки этого вопроса. Цель состоит в том, чтобы выяснить, может ли вызов GC.Collect () улучшить общее поведение / производительность приложения или нет. Мы все согласны с тем, что обстоятельства, при которых вы бы сделали это, крайне редки, но опять же, GC пытается угадать и делает это в большинстве случаев идеально, но это все еще о предположениях.
Спасибо.