Вне зависимости от использования библиотек или фреймворка общая идея ускорения вывода большого количества примитивов или просто сложные объекты, есть разные подходы:
* кешировать результат, в твоем случае можно в памяти создать битмап и отрисовывать в него, тогда при перемещении окна просмотра в него перерисовывать объекты не понадобится
недостаток - при большом размере холста (в пикселах) будут повышенные требования к оперативной памяти
* частично кешировать результат, чем то таким занимаются разработчики/движки игр, когда далекие сцены, внешний вид которых не меняется при локальных перемещениях игрока, заменяются на заранее отрендеренный битмап (текстуру) и рисуют простой спрайт
В общем это перераспределение нагрузки между процессором и оперативной памятью, либо ты постоянно перерисовываешь все объекты на сцене либо ты это делаешь реже но хранишь все в памяти
* воспользоваться видеоускорителем, красивого решения именно для c# у тебя не будет, это вообще не подходящий инструмент. Смысл в том что современные видеоускорители, даже если это оффисный, встроенный в процессор, способны отрисовывать миллионы примитивов, но разработка приложения будет похожа на разработку игры, и готовые фрейамворки либо ограничат тебя в возможностях либо из-за того что используешь неподходящий инструмент, ты будешь тратить время на переходы от managed разработки до нативной
погугли .net using gpu acceleration
если ты готов к вендорлоку nvidia посмотри на их
движок