2010-08-17 4 views
0

хорошо, у меня есть простая игра, которая использует действительно высокую память и процессор. процессор переходит 44%, а память переходит 5000. вот мой кодC++ high memory и cpu

Code

, как это исправить?


EDIT Память: 5000 байт.
cpu: 44% на i5
Программа становится медленнее к моменту ее запуска.

+5

1) Отклоните свой код. 2) См. Справку по ее форматированию при отправке в Stack Overflow. 3) Ограничьте свой код до раздела проблем или используйте его, если это абсолютно необходимо, но не сбрасывайте всю неформатированную проблему на SO. Если вы хотите, чтобы мы помогли вам, облегчите нам помощь. – Thanatos

+1

отформатирован (какой беспорядок ...) –

+0

5 МБ памяти не огромен. –

ответ

2

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

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

+1

Вы решили мою проблему cpu – Ramilol

2

Это слишком много кода для тщательного изучения.

Некоторые общие рекомендации: Оцените, сколько памяти вы ожидаете от использования. Используется ли использование памяти, когда она работает, или она перестает расти в какой-то момент? Если он постоянно растет, у вас, вероятно, есть утечка. Там есть пакеты, которые помогут вам отслеживать, где он протекает, или убедитесь, что вы используете RAII (например, shared_ptr) для управления вашей памятью. Если память держится на большом количестве, вы можете пересмотреть свой алгоритм и посмотреть, где используется память. Вы выделяете много дубликатов данных?

Что касается использования ЦП, единственный способ выяснить, где идет время, - профилировать ваше приложение и посмотреть, где профайлер говорит, что процессор расходуется. Затем вы можете подойти к этой меньшей части кода и определить, как ее улучшить. Наиболее вероятными улучшениями являются поиск полиномиальных (или худших) алгоритмов времени и их субполиномиальное время.

+0

хорошо память не перестанет расти, так как процессор – Ramilol

+3

@Ramiz использовать oprofile + valgrind – Anycorn

+0

где я могу их получить – Ramilol

1

Ваша высокая загрузка процессора может исходить из вашего основного контура.

Я обычно использую что-то вроде

while(gameIsRunning) //Set this to false when the WM_QUIT message arrives 
    { 
    //handle all messages, if any 
    while (PeekMessage(&msg, hwnd, 0, 0, PM_REMOVE)) 
    { 
    if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) 
     { 
     TranslateMessage(&msg); 
     DispatchMessage(&msg); 
     } 
    } 

    //addition per loop code 
    //... 

    Sleep(1); 
    } 

Кроме того, следует отказаться от таймеров и посмотреть в QueryPerformanceTimer and QueryPerformanceFrequency для синхронизации и измерения.