Вы не сможете выжать гораздо большую скорость из этого кода без потери качества или перехода на более быстрый рендерер (GDI, OpenGL, DirectX). Но GDI часто будет немного быстрее (возможно, в 2 раза), а DirectX / OpenGL может быть намного быстрее (возможно, в 10 раз), в зависимости от того, что вы рисуете.
Идея использования Path заключается в том, что вы объединяете много (в вашем примере 20) строк в один вызов метода, а не вызываете DrawLine 20 раз. Это принесет вам пользу только в том случае, если вы сможете упорядочить входящие данные в правильном формате списка точек для процедуры рисования. В противном случае вам придется скопировать точки в правильную структуру данных, и это приведет к потере значительного количества времени, которое вы получаете, группируя путь. В случае DrawPath вам может потребоваться создать GraphicsPath из массива точек, что может привести к экономии времени. Но если вам приходится рисовать один и тот же путь более одного раза, вы можете его кешировать, и тогда вы увидите чистую выгоду.
Если новые точки добавляются в список, но старые не удаляются (т. Е. Вы всегда просто добавляете новые строки на дисплей), то вы сможете использовать закадровое растровое изображение для хранения отрисованных линий. Таким образом, каждый раз, когда добавляется точка, вы рисуете одну линию, а не рисуете все 80 линий каждый раз.
Все зависит от того, что именно вы пытаетесь сделать.