У меня есть стандартное приложение CRUD, которое работает с довольно большим объемом данных. Различные окна обращаются к разным таблицам с помощью Linq-To-SQL, и каждое окно по существу имеет сетку с ячейками, привязанными к отображаемым объектам.
Вот довольно стандартный вариант использования происходящего:
- Открытое окно A
- Закрыть окно A - Окно A теперь находится в памяти, но больше не видно.
- Открытое окно B
- Закрыть окно B - Windows A и B теперь оба в памяти и ни одна не видна.
- Открытое окно C
- Когда данные извлекаются для окна C, ресурсы для окна A освобождаются.
Так что в любой момент времени у меня в памяти хранится 2-3 окна, когда все, что мне действительно нужно, это одно. Я даже добавил код удаления в событие закрытия для этих окон, в котором все ссылки, о которых я могу думать, равны нулю.
Я попытался использовать профилировщик памяти ANTS, и я заметил, что каждое окно установлено как корень GC. Есть ли способ отключить это поведение или заставить GC собирать данные из этих окон?
Спасибо!
PS: я проверил эту ссылку , и она не решила проблему.
РЕДАКТИРОВАТЬ: Проблема в том, что пользователи получают System.OutOfMemoryExceptions.