Прямо сейчас я копирую графику окна из одного окна в другое через BitBlt
из WinApi. Интересно, есть ли какой-нибудь другой быстрый/быстрый способ сделать то же самое в C#.Быстрое копирование GUI в C#?
ключевое слово: вид деятельности здесь. Если бы я остался с WinApi, я бы держал HDC
в памяти для быстрого рисования, и если .NET Framework имеет другие возможности, я бы, вероятно, имел Graphics
объектов. Прямо сейчас мне нужно что-то замедлить, когда мне приходится копировать окна 1920x1080.
Так как я могу повысить производительность gui-копирования в C#?
Я просто хочу знать, смогу ли я стать лучше этого. Явное аппаратное ускорение (OpenGL, DirectX) здесь не для меня. Я решил остаться чистым .NET + WinApi.
// example to copy desktop to window
Graphics g = Graphics.FromHwnd(Handle);
IntPtr dc = g.GetHdc();
IntPtr dc0 = Windows.GetWindowDC(Windows.GetDesktopWindow());
Windows.BitBlt(dc, 0, 0, Width, Height, dc0, 0, 0, Windows.SRCCOPY);
// clean up of DCs and Graphics left out
Ганса вопросы:
- Как медленно это?
- Слишком медленно. Ощущается (очень) жестко.
- Как быстро это должно быть?
- Программное обеспечение не должно feel slow.
- Почему это важно?
- Удобство использования программного обеспечения.
- Как выглядит оборудование?
- Любой случайный ПК.
- Почему вы не можете решить проблему с лучшим оборудованием?
- Это просто программное обеспечение, которое работает на машинах Windows. Вы не годитесь и не покупаете новый ПК для случайного программного обеспечения, которое работает медленно на вашем старом?
Этот вопрос имеет обычную проблему с первыми вопросами. Как медленно? Как быстро это нужно? Почему это важно? Как выглядит оборудование? Почему вы не можете решить это с помощью лучшего оборудования? –
Вам нужен рубинский инкрустированный пони с этим списком пожеланий? Прежде чем решить, что вам нужен определенный уровень производительности, вам необходимо оценить, возможно ли это. –