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