Гибкие бездельничающие объекты с 0 дорожками - PullRequest
1 голос
/ 26 мая 2011

В моем приложении есть визуальный компонент GraphViewer.Каждый раз, когда пользователь меняет графики, создается новая программа просмотра, а старая удаляется со сцены и удаляется.И все же память, похоже, протекает.Когда я использую профилировщик Flex для слежения за маятниковыми объектами, это показывает, что экземпляры GraphViewer действительно просачиваются, но когда я проверяю ссылки на объекты любопытных зрителей, я вижу, что все они (кроме одного) имеют 0 путей к корню GC.

Я делаю снимок памяти после GC, а затем меняю график (создаю новое средство просмотра) N раз.Затем я делаю GC, делаю еще один снимок и смотрю на бесполезные объекты.Я вижу, что N объектов GraphViewer слоняются, но N-1 из них на самом деле имеет 0 путей, и только у одного есть что-то, что фактически ссылается на него.

Почему профилировщик Flex показывает объекты как торчащие, когда они не могут быть получены из корня GC?Надежен ли профилировщик Flex?

1 Ответ

2 голосов
/ 26 мая 2011

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

Во-вторых, трудно ответить на ваш вопрос без кода, но часто причина, по которой компонент представления хранится в памяти, заключается в том, что кто-то либо еще имеетссылка на него или прослушиватель событий не была очищена должным образом.

И, наконец, в течение некоторого времени в GC была известная ошибка (хотя я не проверял ее недавно; около годатак как я мог воспроизвести), где «островки» большой памяти (например, очень большой модуль) не будут очищаться должным образом, потому что алгоритм кругового обхода для GC не поймет, что он отключен от остальных.Чтобы облегчить это, вы можете захотеть реализовать интерфейс IDisposable, в котором ваше «родительское» представление вызывает функцию уничтожения перед удалением со сцены (которая затем распространяется по всему компоненту, а также дочерние элементы для уничтожения)..

...