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