Я делаю некоторые вопросы практического теста, и один из них выглядит следующим образом:
Вы создаете класс с именем Data, который включает в себя объект словаря с именем _data.Необходимо разрешить процессу сбора мусора собирать ссылки на объект _data.Как вы должны заполнить соответствующий код?
public class Data
{
<replace1>
public Data(int count)
{
for (int i = 0; i < count; i++)
{
<replace2>
}
}
}
Вот варианты:
static Dictionary<int, WeakReference> _data;
static Dictionary<int, Int32> _data;
_data.Add(i, new WeakReference(new Class(i*2), false));
_data.Add(i, (Int32)(i*2));
Поскольку, в основном, вопрос «следует использовать WeakReference
илиссылка на структуру, если вы хотите, чтобы сборщик мусора мог собирать ваши объекты? "Я подумал, что структура Int32
будет лучшим выбором, поскольку она не ссылается ни на один объект в куче, и, таким образом, этот объект может быть немедленно собран мусором, даже если слабые ссылки не сохраняют объект живым, если на него нет сильных ссылок (насколько я понял) Я все еще думал, что структура будет лучшим ответом , но практический тест говорит, что WeakReference
является правильным ответом .Имейте в виду, что этот практический тест был неправильным даже для самых очевидных и простых вопросов.
Не могли бы вы объяснить, почему в этом случае WeakReference
будет лучше подходить, чем структура, если мы хотим, чтобы GCбыть в состоянии собрать наш объект?