Нет, и это ни на что не повлияет:
Думайте об этом так. Скажем, у вас есть пользовательский класс MyBigMemoryClass
, для которого вы хотите собрать экземпляр - у вас должен быть какой-то способ передать ссылку на это сборщику мусора. В теоретическом мире это было бы что-то вроде:
// Not valid code!
MyBigMemoryClass instance = GetMyInstance();
GC.CollectObject(instance);
Однако на данный момент у вас все еще есть ссылка на экземпляр вашего класса в переменной instance
, поэтому объект по-прежнему укоренен и не является кандидатом на сборку мусора . GC увидит, что он укоренен, и оставит его.
Самое близкое, что вы можете сделать, - это отключить экземпляр вашего объекта, а затем заставить сборщик мусора попытаться собрать все:
MyBigMemoryClass instance = GetMyInstance();
// Do something with instance
instance = null; // Unroot this, so there are (hopefully) no references to it left
GC.Collect(); // Collect everything
При этом, как правило, это очень плохая идея. Гораздо лучше никогда не вызывать сборщик мусора и позволить ему управлять памятью за вас. Существует очень немного исключений, в основном при работе с собственным кодом, и эти исключения обычно обрабатываются лучше с помощью GC.AddMemoryPressure и GC.RemoveMemoryPressure .