2010-08-20 4 views
2

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

+0

Это может быть связано с сбором мусора. Вы создаете и выпускаете много объектов? –

+0

На самом деле, я думаю. Я реализовал представление производительности, и то, что происходит, будет использовать мою используемую память, и будет сбрасываться на пару мегабайт каждые пару секунд или около того, и со временем потребление базовой памяти начнет расти. – RCIX

ответ

3

Вы почти наверняка попадаете в мусорную корзину.

И да, есть инструмент для фиксации этого. Вы хотите CLR Profiler. Это покажет вам, где именно вы выделяете память.

На Xbox сборщик мусора будет работать после каждого выделенного 1 МБ, и он будет медленным. Windows GC намного более прощает, но все равно может вызвать дрожание частоты кадров.

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

Я рекомендую читать this post и this post на блоге Шона Харгривза.

+0

Хорошо, я получил некоторые данные из профилировщика, и я жду его загрузки, но пока есть какие-либо другие профилировщики, которые не превратят мою игру в литеральное слайд-шоу? – RCIX

+0

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

+0

@Joel: это правда, но это не «немного»: это происходит от (не больше точек) 60FPS до 1 кадра каждые 3 или около того секунд. Очень трудно контролировать, чтобы получить достойный бег. – RCIX

1

Вы говорите, что вы идете с рамы с 16 мс до 3000 мс. Таким образом, в долгосрочной перспективе тратится (3000 - 16)/3000 = 99,5% своего времени на то, чего вы не ожидали.

В течение этих 3 секунд, как вы можете узнать, что он делает?

Просто приостановите его несколько раз и проверьте стек вызовов.

Шанс вы не будет видеть, что он делает на каждой паузы составляет 0,5%

Если это в сборщика мусора, это должно подтвердить это. Если он сделает что-то еще, он также скажет вам.

+0

Более правильно, что происходит, игра замедляется до 2-5 кадров в секунду, но мое время обновления не появляется таким образом. Слайд-шоу (несколько секунд между кадрами) происходит только в том случае, если у меня есть профиль памяти. – RCIX

+0

@RCIX: тем не менее, приостановите его, когда он будет медленным, и вы увидите проблему. (5fps = 12-кратное замедление, поэтому вероятность ловить его на каждой паузе составляет 92%.) Люди не привыкли к этой концепции, но если вы попробуете, это станет естественным. Причины, по которым подробно описаны здесь: http://stackoverflow.com/questions/1777556/alternatives-to-gprof/1779343#1779343 –

Смежные вопросы