Ответ 1
Вам действительно нужно будет точно определить, что вы имели в виду, "сколько памяти используется для определенного объекта". Например, вы могли бы иметь в виду "если бы этот объект был собран мусором, сколько бы он был освобожден" - или вы могли бы означать, "сколько памяти делает этот объект и все, что он затрагивает".
Хорошей иллюстрацией является ваша интерпретация строк. Предположим, вы это сделали:
List<string> internedStrings = new List<string>();
List<string> nonInternedStrings = new List<string>();
for (int i=0; i < 1000; i++)
{
string tmp = new string(' ', i+1);
nonInternedStrings.Add(tmp);
tmp = tmp.Intern();
internedStrings.Add(tmp);
}
Действительно ли nonInternedStrings
занимает больше памяти, чем internedStrings
? Если internedStrings
собирался сбор мусора, он не освобождал бы столько памяти, но если бы internedStrings
никогда не создавался (в том числе и не интернировал каждый из его элементов), тогда больше памяти не требовалось бы.
Если вы можете уточнить, что именно вы имеете в виду, мы сможем вам помочь. Это сложный вопрос.