У меня есть несколько классов, которые содержат ссылки на другие классы через экземпляры экземпляров IDictionary.Почему мой Destructor получает вызов?
Как так:
class A
{
private readonly Dictionary<int, B> _particles = new Dictionary<int, B>();
public void CreateNewB(int someInt)
{
var b = new B();
if (!_particles.ContainsKey(someInt)
_particles.Add(someInt, b);
}
}
так это настройки, и я никогда не удалить их из этого словаря, но по какой-то причине, деструктор для класса B вызывается на GC перспективе каждый сейчас, а затем и Я не понимаю, почему.
Не может ли это быть связано с тем, как класс Dictionary добавляет новые ссылки?
FIXED:
Хорошо, спасибо всем за ответы, я, конечно, получить большое понимание о GC и deconstructors в настоящее время.
Но проблема была моя, я добавлял someInt только если она не существует уже и через ущербной бизнес-логики, someInt всегда был один, поэтому первый раз через него работал и deconstructors не получил называется. Но во второй раз, однако, экземпляр «b» просто не был добавлен в список и был очищен в ходе GC.
Еще раз спасибо всем, кто помог!
Можете ли вы предоставить наименьший набор кодов, воспроизводящих поведение? – jason
«Разве это может быть связано с тем, как класс Dictionary добавляет новые ссылки?» Маловероятно. Словарь содержит сильные ссылки, которые предотвращают сбор любых ключей или значений до тех пор, пока не будет собрано сам словарь. – itowlson
@Mark: Хорошо, это вздох облегчения.Поведение, которое вы описывали, не должно происходить, ЕСЛИ не было недостатка в вашем коде. Рад, что мы могли бы «помочь». – jason