Проверенный метод заключается в использовании закадрового растрового изображения, которое обновляется только тогда, когда данные, представленные вашим элементом управления, фактически изменяются; затем все, что нужно сделать OnPaint
, это отобразить это растровое изображение на экране.
Если процесс рисования интенсивный и у вас так много элементов управления, вы обнаружите, что это существенно влияет на производительность вашего приложения.
Обратите внимание, что использование свойства элемента управления DoubleBuffering
не поможет в вашем случае - оно делает указанием WinForms визуализировать в закадровое растровое изображение перед отображением на экране, но это все же происходит при каждой рисовании цикл, поскольку WinForms не отслеживает, когда изменилось представление.
Итак, вам придется свернуть свой собственный. Это не так сложно. Вот что выглядит как достаточно хорошая статья на эту тему .