Какую среду приложений вы планируете использовать?Методы эффективного рисования очень различаются между WinForms (Win32) и WPF.
Вы правы, что подпрограммы рисования .NET не в полной мере используют преимущества графического процессора.Используя DirectX или OpenGL, одна немедленная оптимизация будет заключаться в предварительной загрузке всех ваших плиток изображения (или, по крайней мере, всех плиток, необходимых для области непосредственного просмотра плюс немного больше) в память GPU с использованием списков изображений или списков отображения.Затем вы бы нарисовали плитки на поверхности по индексу - нарисуйте плитку N в точке x, y.Обычно это происходит намного быстрее, чем рисование на поверхности графического процессора с использованием растровых изображений, хранящихся в основной системной памяти, поскольку пиксели растрового изображения необходимо копировать в графический процессор для каждой нарисованной плитки, и это занимает много времени.Рисование по индексу также использует намного меньше памяти GPU, когда вы можете использовать одну и ту же плитку изображения в нескольких местах на выходе.
OpenGL против DirectX - ваш выбор, но IMO DirectX развивается более быстрыми темпами, предоставляя большеАппаратное ускорение функций, чем OpenGL.Драйверы OpenGL в Windows также имеют репутацию пренебрегаемых поставщиками оборудования.Их основное внимание уделяется их драйверам DirectX.
Подумайте, действительно ли вам нужен OpenGL или DirectX для приложения 2D-плиток.Требование OpenGL или DirectX уменьшит количество машин, особенно старых, которые могут запускать ваше приложение.OpenGL и DirectX могут быть излишними.Вы можете многое сделать с простым старым GDI, если вы умны в этом.
Держитесь подальше от многопоточности, пока у вас не будет действительно веской причины для этого и у вас есть некоторый опыт работы с потоками.Многопоточность предлагает вознаграждение за некоторое повышение производительности для некоторых вычислительных ситуаций, но также приносит новые головные боли и новые проблемы с производительностью.Убедитесь, что выгода значительна, прежде чем подписаться на все эти новые головные боли.
В общем, перемещение пикселей на экране обычно не подходит для многопоточности.У вас есть только одно устройство отображения (в большинстве случаев), поэтому использование нескольких потоков, пытающихся одновременно изменять пиксели, не работает.Чтобы позаимствовать выражение у руководства проекта: если женщина может создать ребенка за 9 месяцев, можете ли вы использовать 9 женщин, чтобы создать 1 ребенка за 1 месяц?;>
Работайте над определением частей вашей системы, которым не требуется доступ к одним и тем же ресурсам или устройствам.Это лучшие кандидаты для запуска в параллельных потоках, чем перетаскивание плиток на экран.
Наилучшей оптимизацией является обнаружение работы, которая не требуется выполнять - например, уменьшение количества раз, когда плитки перерисовываются, или переход на индексированную модель, так что плитки можно извлекать из памяти графического процессора вместо системной.объем памяти.