Я полностью согласен, Джордж Клингерман, CLR на 360 и WP7 гораздо медленнее сборщиков мусора, чем на ПК.
Прежде всего, я рекомендую вам узнать, как работает сборщик мусора (это не так сложно).
Основные шаги: 1. Проверка 2. Профиль 3. Поиск местоположения 4. Исправление
Здесь вы можете найти пошаговые инструкции (основные) о том, как это сделать с помощью CLRProfiler http://spacedjase.com/post/2010/07/02/How-to-eliminate-frame-by-frame-Garbage-Generation-using-CLR-Profiler.aspx
CLR Profiler позволяет вам просматривать управляемую кучу процесса и исследовать поведение сборщика мусора.Используя различные представления в инструменте, вы можете получить полезную информацию о выполнении, распределении и потреблении памяти вашего приложения.(Загрузить http://www.microsoft.com/download/en/details.aspx?id=16273)
Вот самые полезные ссылки, которые я нашел в Интернете:
И вот краткое изложение того, что я считаю наиболее существенными проблемами:
Не используйтеlinq Не используйте LINQ. Он выглядит круто. Он делает ваш код короче, проще и, возможно, даже легче для чтения. Но запросы LINQ могут легко стать большим источником мусора. Они хорошо подходят для вашего кода запуска, так как вы собираетесьгенерировать мусор в любом случае, просто загружая ресурсы и подготавливая игровые ресурсы, но не используйте его в Update, Draw или любом другом методе, который вызывается во время игры.
Отображение строки без запуска сборки мусора Ответить ЦитатаМинимизируйте использование ToString (). Как минимум он создает строку, которая живет в куче. См. Выше о том, как нарисовать int на экране без генаОцените любой мусор.Если вам нужно использовать ToString, попробуйте ограничить частоту его вызова.Если строка изменяет только каждый уровень, генерируйте ее только один раз в начале уровня.Если оно изменяется только при изменении определенного значения, генерируйте его только при изменении этого значения.Любые ограничения, которые вы можете поставить, стоят того.Время, необходимое для проверки логического условия, настолько мало, что его практически не существует.Вероятно, вы могли бы уместить десятки и даже сотни тысяч проверок истинности / ложности за количество времени, которое требуется ГХ для работы в сложной куче.http://forums.create.msdn.com/forums/p/45512/273330.aspx#273330 http://spacedjase.com/post/2010/09/16/Garbage-safe-number-to-string-conversion.aspx Остерегайтесь форматирования строки.Трудно манипулировать строками в .NET без выделения ресурсов.
Не выделять память (дух!) Это просто: не вызывать new для ссылочных типов.Однако это нормально для новых типов значений, таких как Matrix, Vector3 и Color.Каждый раз, когда вы захотите создать новый ссылочный тип, используйте пул объектов для повторного использования существующих экземпляров.Образцы Particle and Audio 3D oncreators.xna.com используют эту технику, и SwampThingTom опубликовал блог о многоразовой коллекции пулов.http://swampthingtom.blogspot.com/2007/06/generic-pool-collection-class.html http://spacedjase.com/post/2010/07/02/Generic-Resource-Pool.aspx
Не используйте классы, которые выделяются от вашего имени. Когда вы добавляете данные в класс коллекции, такой как List или Dictionary, может потребоваться выделить память для расширения коллекции.Вы можете избежать этого, используя перегрузки конструктора коллекции, которые имеют явные параметры емкости.Укажите емкость для предварительного выделения столько памяти, сколько вам когда-либо понадобится для максимального количества объектов, которые вы намерены хранить в коллекции.
Не заставлять среду выполнения CLR выделять Среда выполнения CLR выделяет память, когда происходит упаковка.Избегайте этого, как чумы!Упаковка может происходить по многим причинам, некоторые очевидные, другие менее. • Если вы назначаете тип значения переменной объекта, она упаковывается.• Если вы храните типы значений в одном из старых неуниверсальных классов коллекции, они будут упакованы.• Доступ к типам значений через интерфейс приводит к их упаковке.• Если вы используете тип enum в качестве словарного ключа, внутренние словарные операции вызовут бокс.Вы можете избежать этого, используя целочисленные ключи и приводя значения enum к целым числам, прежде чем добавлять их в словарь
Привет из Аргентины HERNAN