Вам действительно нужно было бы точно определить , что вы имели в виду под «сколько памяти используется для определенного объекта». Например, вы могли бы иметь в виду «если этот объект был собран мусором, сколько будет освобождено» - или вы могли бы иметь в виду «сколько памяти занимает этот объект и все, к чему он прикасается».
Ваш пример о интернировании строк является хорошим примером. Предположим, вы делаете:
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
никогда не был создан (включая не интернирование каждого из его элементов), тогда больше памяти никогда бы не потребовалось.
Если вы можете более конкретно указать точно , что вы имеете в виду, мы можем вам помочь. Хотя это сложная проблема.