Стоит ли беспокоиться об освобождении ресурсов в этом случае?

2

Скажем, у меня есть класс Collection, который содержит список элементов.

public class Collection
{
    private List<Item> MyList;
    //...
}

У меня есть несколько экземпляров этого класса Collection, у которых есть разные MyLists, но есть некоторые элементы. Например: Есть 10 элементов, ссылки Collection1. Элементы 1-4, Collection2 имеет элементы 2-8 и Collection3 4,7,8 и 10 в своем списке.

Я реализовал это следующим образом: у меня есть один глобальный список, который содержит любые доступные элементы. Прежде чем я создам новую коллекцию, я проверю, есть ли в этом списке элементы, которые мне нужны, - если нет, я создаю элемент и добавлю его в глобальный список (и в коллекцию, конечно).

Проблема, которую я вижу, заключается в том, что эти элементы никогда не будут выпущены, даже если все коллекции исчезли, память, которую они потребляют, по-прежнему не освобождена, потому что глобальный список все еще ссылается на них. Это что-то, о чем я должен беспокоиться? Если да, что мне делать? Я подумал о добавлении счетчика в глобальный список, чтобы узнать, когда элемент больше не нужен и удалить его ссылку.

Edit: Думаю, это проблема дизайна. Я откажусь от идеи глобального списка и перейду через все коллекции и посмотрю, есть ли у них необходимый элемент.

Теги:
dispose

2 ответа

1
Лучший ответ

Это похоже на проблему с дизайном, вам действительно нужен глобальный список?

Помимо слабых ссылок, которые упоминает Джон, вы также можете периодически перестраивать глобальный список (например, после удаления коллекции) или только строить его динамически, когда вам это нужно, и снова выпускать его.

Вам нужно будет решить, какой метод наиболее уместен, здесь не хватает контекста.

2

Если глобальный список нуждается в ссылках на элементы, вы не сможете реально их освободить. Вам действительно нужны ссылки на элементы в глобальном списке? Когда вы должны логически удалять элементы из глобального списка?

Вы можете использовать слабые ссылки в глобальном списке и периодически обрезать WeakReference значения, если их референты были собраны.

  • 0
    Спасибо за упоминание слабых ссылок - я не знал о них. Но я не думаю, что они имеют отношение к моей проблеме.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню