Использование небезопасных указателей - это самый быстрый способ прямого манипулирования памятью в C # (определенно быстрее, чем при использовании функций-обёрток Marshal).
Просто из любопытства, какие операции 2D-рисования вы пытаетесь выполнить?
Я спрашиваю, потому что блокировка поверхности DirectX для выполнения манипуляций на уровне пикселей потеряет большинство преимуществ аппаратного ускорения, которые вы надеетесь получить от использования DirectX. Кроме того, устройство DirectX не сможет инициализироваться при использовании через службы терминалов (удаленный рабочий стол), поэтому элемент управления будет недоступен в этом сценарии (это может не иметь значения для вас).
DirectX будет большой победой при рисовании больших треугольников и преобразовании изображений (текстуры отображаются на квад), но на самом деле он не будет так хорошо работать с однопиксельной манипуляцией.
Оставаясь на земле .NET, одна альтернатива заключается в том, чтобы сохранить объект Bitmap для использования в качестве вашей поверхности, используя LockBits и прямой доступ к пикселям через небезопасный указатель в возвращенном объекте BitmapData.