Скажем, у нас есть класс с 10000 членами строки const.
class Schema
{
//Average string length is 20
public const string ID1 = "some.constant.value";
public const string ID2 = "some.other.constant.value";
//...
}
Не все поля упоминаются в остальной части кода. Только 10% из них доступны при запуске - их ссылки назначаются в качестве ключа для различных словарей (тысячи экземпляров словаря). Я понимаю, что константные строки интернированы - многократная ссылка на константную строку не увеличивает потребляемую память более чем на размер токена метаданных, указывающего на смещение в таблице интернированных строк.
Я понимаю, что строки const компилируются в сборку и, таким образом, влияют на размер скомпилированной сборки.
В какое точное время / событие эти строки const потребляют память времени выполнения?
Будет ли вся память, необходимая для всех строк const, взятых во время загрузки сборки, или это задерживается до тех пор, пока класс не будет скомпилирован JIT?
Можем ли мы уменьшить потребление памяти после запуска, изменив что-то в уравнении? (сделать поля неконстантными, сделать строки статическими полями?).
Давайте предположим, что приложение Winforms (.NET 2.0).