Согласно документам, GC.GetTotalMemory
возвращает
Число, которое является наилучшим доступным приближением количества байтов, выделенных в настоящий момент в управляемой памяти.
Это немного вводит в заблуждение / сбивает с толку некоторых разработчиков, особенно тех, кто приезжает из родного мира.Он скажет вам, сколько памяти выделил GC для внутреннего использования , но не то, каково его фактическое выделение для всей кучи (т.е. выделенной и нераспределенной управляемой памяти) из системы.*
Он также не сообщает о собственных распределениях.Это может быть огромным, если вы используете много объектов GDI (растровые изображения, кисти и т. Д.), Поскольку они также имеют собственное распределение памяти.В случае растрового изображения, его управляемый объем на самом деле намного меньше, чем его собственный размер.
Если вас интересует фактическое влияние управляемых приложений на общие системные ресурсы, вам нужно запросить ОС и спроситьсколько физической и виртуальной памяти ему нужно, чтобы получить реальное представление о том, что происходит (я считаю, что GC.GetTotalMemory на самом деле относительно бесполезен).P / Invoking GlobalMemoryStatus дает вам то, что вы хотите.MSDN содержит пример .