Подтвердить что ты не робот

Самый быстрый API для рендеринга текста в Windows Forms?

Нам нужно оптимизировать рендеринг текста для приложения С# Windows Forms, отображающего большое количество небольших строк в нерегулярной сетке. В любое время может отображаться более 5000 ячеек, которые обновляются 4 раза в секунду. Семейство и размер шрифта согласованы по всем ячейкам, хотя цвет может варьироваться от ячейки к ячейке, как и жирный/курсив/равный.

Я видел противоречивую информацию в Интернете о том, что TextRenderer.DrawText vs. Graphics.DrawString является самым быстрым/лучшим, что сводится к GDI vs. GDI + на уровне Win32.

Я также видел радикально разные результаты в Windows XP и Windows Vista, но моей основной целью является Windows XP. Статьи, обещающие большие успехи в WinFX и DirectX 10 здесь не помогают: - )

Какой лучший подход здесь? Я не боюсь вводить небольшой слой С++/CLI и оптимизировать обработку контекста устройства, чтобы выжать больше производительности, но я хотел бы получить некоторые окончательные советы о том, в каком направлении двигаться.

EDIT: Спасибо за первоначальные ответы. Я попытаюсь использовать комбинацию рендеринга растрового изображения и придерживаться эквивалентных вызовов GDI.

4b9b3361

Ответ 2

5000+ рендеринг текста медленный даже с GDI, особенно если вам нужна прокрутка. Создайте отдельный поток рендеринга и сообщите поток пользовательского интерфейса каждые 200 мс и бит биттете текущие результаты. Это дает плавный пользовательский интерфейс.

Ответ 3

GDI быстрее при рисовании вообще GDI+. Я работал над проектом, который должен был привлечь тысячи строк и текстовых строк, а переход с GDI + на GDI значительно улучшился. Это было использование Windows XP, поэтому я не могу комментировать Vista. Я бы также рекомендовал использовать двойную буферизацию для вашего чертежа, чтобы повысить производительность. Создайте совместимый экранный растровый рисунок и повторите его использование каждый раз, когда вам нужно рисовать.

Ответ 4

Создание класса взаимодействия С++/CLI для рисования в собственном коде приведет к сумасшедшему рисованию. Мы свидетели этого и измерили его.

Если вы этого не сделаете, мы обнаружили, что графика .DrawString немного быстрее, чем TextRenderer.DrawText.

Ответ 5

В моей Windows 7 64-битной системе TextOut даже немного медленнее, чем DrawString! TextRenderer.DrawText намного медленнее, чем DrawString.