Я не могу понять, как мы связываем экземпляр объекта с давлением, которое он добавляет.
Экземпляр объекта связывает давление, которое он добавляет, со ссылкой на себя, вызывая AddMemoryPressure
. Объект уже имеет идентичность с самим собой! Код, который добавляет и снимает давление, знает, что такое this
.
Я не вижу, чтобы ссылка на объект передавалась в G C .AddMemoryPressure.
Правильно. необязательно не является ассоциацией между добавленным давлением и любым объектом, и независимо от того, существует оно или нет, G C не обязательно должен знать эту информацию, чтобы действовать надлежащим образом.
Связываем ли мы добавленное давление памяти (ампер) с объектом вообще?
G C этого не делает. Если ваш код делает, это ответственность вашего кода.
Кроме того, я не вижу никаких причин для вызова GC.RemoveMemoryPressure(m_size)
Это так, что G C знает, что дополнительное давление исчезло.
Я не вижу, как усилитель может влиять на G C
Это влияет на G C добавив давление!
Я думаю, что есть фундаментальное неправильное понимание того, что здесь происходит.
Добавление давления памяти просто говорит G C, что существуют факты о распределении памяти, которые вы знаете, и что G C не знает, но имеет отношение к действию G C. Нет требования, чтобы добавленная нагрузка на память была связана с каким-либо экземпляром какого-либо объекта или привязана к времени жизни любого объекта .
Код, который вы разместили, является общим шаблоном: объект имеет дополнительную память, связанную с каждым экземпляром, и он добавляет соответствующее количество давления при выделении дополнительной памяти и удаляет его при освобождении дополнительной памяти. Но не требуется , чтобы дополнительное давление было связано с указанным c объектом или объектами. Если вы добавили кучу неуправляемых выделений памяти в своем методе static void Main()
, вы можете решить добавить соответствующее ему давление памяти, но с этим дополнительным давлением нет объекта .