【发布时间】:2014-01-17 11:31:07
【问题描述】:
现在我正在通过 WinApi 中的BitBlt 将窗口图形从一个窗口复制到另一个窗口。我想知道在 C# 中是否有任何其他更快/更快的方法来做同样的事情。
这里的关键字是performance。如果我应该继续使用 WinApi,我会在内存中保存 HDC 以便快速绘图,如果 .NET Framework 有其他可能性,我可能会保存 Graphics 对象。现在,当我必须复制 ~ 1920x1080 的窗口时,我有点慢。
那么如何提高 C# 中 gui 复制的性能?
我只是想知道我是否能变得比这更好。显式硬件加速(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
汉斯的问题:
- 有多慢?
- 太慢了。感觉(非常)僵硬。
- 需要多快?
- 软件不能感觉慢。
- 为什么它很重要?
- 软件的用户友好性。
- 硬件是什么样的?
- 任何随机 PC。
- 为什么你不能用更好的硬件来解决它?
- 它只是在 Windows 机器上运行的软件。你不会去买一台新电脑来换一个在旧电脑上运行缓慢的随机软件吗?
【问题讨论】:
-
这个问题与性能问题有共同的问题。它有多慢?它需要多快?它为什么如此重要?硬件是什么样的?为什么不能用更好的硬件来解决?
-
您是否也需要一匹镶有红宝石的小马和愿望清单?在决定您需要一定程度的性能之前,您确实需要评估它是否可行。
标签: c# winforms performance winapi graphics