Вы определенно хотите изучить двойную буферизацию. Прямо сейчас то, что вы делаете, рисует все прямо на экране, и пользователь видит это. Что делает двойная буферизация, так это то, что она сначала рисует все в внеэкранном буфере (изображение), и как только все это вычисляется и изображение готово, вы рисуете внеэкранный буфер в видимом буфере (таким образом, пользователь видит только последний кадр, а не промежуточные кадры).
Это похоже на то, что чаще всего делают приложения OpenGL или Direct3D. У них есть два буфера. Все выводится в внеэкранный буфер, и как только это будет сделано, буферы меняются местами, а тот, который теперь находится за пределами экрана, очищается, после чего на него снова рисуется новое изображение.
И, как также указывал световой кодер, у вас действительно высокий fps. Попробуйте синхронизировать его с частотой обновления монитора, чтобы не тратить ресурсы чаще, чем это необходимо.