Да, я бы попробовал двойную буферизацию. Если вы визуализируете изображение вне экрана, вы можете просто прокрутить растровое изображение.
Вы можете попробовать сделать весь график одним большим растровым изображением и позволить полосам прокрутки перемещать его. Однако, если ваш график очень большой, вам нужно ограничить размер растрового изображения видимой областью, закрасить только то, что ему видно, и обработать прокрутку практически так же, как вы сейчас.
При тестировании на 32-битной Windows XP я обнаружил, что ограничение составляет около 237,9 миллиона пикселей. Это, безусловно, достаточно для большинства элементов управления, но этого может быть недостаточно для вашего приложения.
Для любопытных, вот максимальные размеры растрового изображения Windows, которые мы смогли создать и использовать:
Width Height Area (pixels)
====== ====== ===========
32,767 7,261 237,921,187
25,000 9,517 237,925,000
23,792 10,000 237,920,000
20,000 11,896 237,920,000
15,861 15,000 237,915,000
15,000 15,861 237,915,000
11,896 20,000 237,920,000
10,000 23,792 237,920,000
9,517 25,000 237,925,000
7,261 32,767 237,921,187