Экземпляр класса сама по себе будет занимать 24 байта на 32-битной CLR:
- 8 байт накладных расходов объекта (блок синхронизации и тип указателя)
- 4 байта для Int
- 4 байта для строки ссылки
- 8 байт для двойной
Следует отметить, что память для самой строки является в дополнение к этому - но многие объекты могли бы, например, использовать ссылки на одну и ту же строку.
Методы не несут такой же размер штрафа за хранение - это поля. По существу, они связаны с типом , а не с экземпляром типа, но есть версия IL и JIT-скомпилированный код. Однако, как правило, вы можете игнорировать это в моем опыте. Вы должны иметь большой объем кода и очень мало экземпляров для памяти, занимаемой кодом, чтобы быть значительным по сравнению с данными. Важно то, что вы не получаете отдельную копию каждого метода для каждого экземпляра.
РЕДАКТИРОВАТЬ: Обратите внимание, что вам удалось выбрать относительно простой корпус. В ситуациях, когда у вас есть поля с логически меньшими размерами (например, short
или byte
), CLR выбирает, как выложить объект в памяти, так что значения, требующие выравнивания по памяти (находящиеся на границе слова), выложены соответствующим образом, но, возможно, поддержка других - так что 4 байтовых поля может в конечном итоге взять 4 байта, или они могут принять 16, если CLR решает выровнять каждый из них по отдельности. I думаю, это специфично для реализации, но возможно, что спецификация CLI определяет точный подход.
Хорошим инструментом для понимания сборщика мусора является профилировщик CLR. –