2013-04-25 2 views
3

Есть ли способ просмотреть содержимое того, что из мусора?Как просмотреть содержимое мусорной коллекции?

В принципе, я мог бы видеть, когда у меня есть всплеск GC, ОК 1200 объектов такого типа были собраны, поэтому, возможно, я смогу идентифицировать рефакторинг &, чтобы избежать мусора в первую очередь.

Это с Unity (Mono environment), поэтому я не могу использовать какой-либо мощный инструмент, например Ants Memory Profiler, или даже Mono HeapShot, потому что я не контролирую, как запускается исполняемый файл.

Я читал об уведомлениях GC, но они, похоже, не включены в версию Mono Unity, и в любом случае я не думаю, что это даст мне уровень детализации, который я хочу (будет ли это ?).

Любые идеи?

ответ

0

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

У вас не должно быть «GC Spike», поскольку GC обычно достаточно умный, чтобы не сгладить все в коллекции. В верхней части, GC редко собирает «сразу», если не сказать.

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

+0

Стоит отметить, что Unity имеет [собственный способ уничтожения объектов] (http://answers.unity3d.com/questions/7853/garbage-collection.html) (см. Ответ утки). Кроме того, в документации Object.Destroy отмечается, что объекты уничтожаются после текущего цикла обновления. – Jerdak

+0

@Jerdak Я не уверен, но я думаю, что это применимо только к объекту Unity. Возможно, это неправильно, но я думаю, что ничто не заставляет вас извлекать из Объекта Единства, что означает, что они не следуют одному и тому же шаблону разрушения. – LightStriker

+0

Это было своего рода суть моего комментария. Я делал предположение, что OP пытался удалить игровые объекты Unity, которые происходят из Unity Object. – Jerdak