Использование вызовов Win32 API через классы .NET GDI - PullRequest
0 голосов
/ 14 февраля 2012

У меня есть приложение winforms, разработанное на C #, которое включает в себя много рисования экрана.Картина включает в себя рендеринг пользовательских элементов управления и других 2D-объектов.Теперь проблема в том, что рисование всего экрана занимает примерно от 4 до 5 секунд.Я оптимизировал код до уровня, когда все необходимые данные делаются доступными в самой памяти, а не считываются с диска или сети.

Чтобы еще больше сократить время рендеринга, я планировал перейти наследующие опции

  1. Вызывать напрямую функции GDI, предоставляемые Win32API, вместо использования классов GDI, предоставляемых .NET

  2. Использовать DirectX как Iслышал, что это очень эффективно при рендеринге.Мое приложение не включает какой-либо вид 3D-рендеринга.

Пожалуйста, помогите мне решить, какой вариант выбрать?Существуют ли какие-либо параметры, кроме этого, например, высокопроизводительные компоненты или библиотеки сторонних производителей.

1 Ответ

1 голос
/ 14 февраля 2012

Из личного опыта:

  • GDI + только медленнее, чем GDI, в два раза. Это не сильно поможет при переходе с .NET (который использует GDI +) на чистый GDI.

  • Direct2D такой же медленный, как и GDI - по крайней мере, для рисования основных фигур. Так что, если вы не делаете что-то более сложное, это, вероятно, не поможет.

Лучше всего, вероятно, сократить чертеж и создать двойной буфер данных.

Если это не сработает, вы, вероятно, захотите сгенерировать растровое изображение в памяти (с использованием byte[] или чего-то другого, полностью избегая графических API) и просто скопировать (скопировать) его прямо на экран. Это сложно, но почти всегда оказывается самым быстрым.

...