C#WinForms-有谁知道C#GDI库不慢GDI+;

C#WinForms-有谁知道C#GDI库不慢GDI+;,c#,winforms,gdi+,gdi,C#,Winforms,Gdi+,Gdi,GDI+速度非常慢,几乎完全是软件,而GDI是高度硬件加速的。 GDI+是图形类在WinForms上使用的,它太慢了 有没有人制作了一个.NETGDI库,这样我们就可以有速度了 [编辑] 许多人推荐OpenGL/DirectX。我的一个要求是客户端兼容性,尤其是远程桌面。AFAIK远程桌面不支持OGL/DirectX开箱即用。[/EDIT]您可以尝试移动到WPF。 我这样做是因为WinForms绘制速度慢。 这种转变非常艰难,特别是对于像我这样的老式程序员来说 但WinForms在启动速度和RA

GDI+速度非常慢,几乎完全是软件,而GDI是高度硬件加速的。 GDI+是图形类在WinForms上使用的,它太慢了

有没有人制作了一个.NETGDI库,这样我们就可以有速度了

[编辑]
许多人推荐OpenGL/DirectX。我的一个要求是客户端兼容性,尤其是远程桌面。AFAIK远程桌面不支持OGL/DirectX开箱即用。[/EDIT]

您可以尝试移动到WPF。
我这样做是因为WinForms绘制速度慢。
这种转变非常艰难,特别是对于像我这样的老式程序员来说

但WinForms在启动速度和RAM方面是无法匹敌的。
WPF启动缓慢,占用大量内存。

您签出了吗?它有一个托管包装器,这是一个完全硬件加速的2d API,并且与传统GDI很好地混合

编辑:

我还发现了这个你可能会感兴趣的图书馆:

“SharpDX旨在用作托管DirectX框架的替代方案。API是从DirectX SDK头自动生成的,带有AnyCpu目标,这意味着您可以在x86和x64平台上运行应用程序,而无需重新编译项目或将程序集安装到GAC中。SharpDX也是最快的托管DirectX实现。”


它还支持Direct2D。

如果您的应用程序是跨平台的,我建议使用,它是OpenGL的托管包装,通常比DirectX(托管或本机)更容易学习.OpenTK/OpenGL往往也比DirectX提供更好的性能。使用OpenTK,您可以完全在GPU上绘制图像,然后将其光栅化为位图,可以与System.Drawing中的位图类进行交互。

Microsoft(存档于2010年2月)提供了从托管语言调用DirectX API的示例


您可以得到

GDI+中的文本呈现速度比GDI慢。Microsoft在.NET 1.1之后实现了这一点

这就是.NET 2.0包含包装GDI的新类的原因。它有两个静态方法:

在.NET 2.0中,所有WinForm控件都转换为使用
TextRenderer
,而不是:

  • 图形测量
  • 拉丝
(前提是关闭


在GDI+中绘制
位图也很慢,这就是为什么要使用它。它绘制速度非常快

对象以优化的格式存储位图,以便在特定设备上显示。要显示缓存的位图,请调用方法

另见

GDI+使用GDI。如果你需要直接使用GDI,使用C或C++。你想做什么?GDI+让你慢下来?除了找到位图,我总是发现它很快,在这种情况下你可以降到PInvoke BitBlt。你能更具体地说GDI的哪些部分在减慢你吗?@ Paul Sasik,或者,如果你需要DIR的话。ect访问内存中的图像,只需调用锁位并获取指针。具体来说,我正在绘制网格,可能还有图表(用于金融系统)典型的客户端有4个监视器,我的很多窗口都在2-4个监视器上全屏显示。我有使用WPF的经验,并构建了一些WPF窗口。我注意到WPF的性能也很差,特别是在使用低端/集成图形的机器上(如我的工作机)。问题变得很严重(在GDI+和WPF上)当窗口大小很大或最大化时。此外,我同意转换并不容易,而且很痛苦。我仍然发现自己使用WPF,比如WinForms,也就是说-不使用花哨的绑定,而是使用大量代码来完成大量可以自动数字完成的工作-不确定这是否会对性能产生很大影响。有很多对WPF性能的大惊小怪(四核nVidia桌面无法像嵌入式iPhone设备那样流畅地制作动画?)我没听说过SlimDX或SharpDX。但我想说的是Direct2D。缺点是你必须从头开始创建一个完整的控件库。WPF应该是硬件加速选项;但它启动缓慢,动画制作缓慢,学习困难。哇,SharpDX看起来真的很不错。它看起来不像是在RDP上工作:(Direct2D是针对应用程序的DirectX的高性能包装,请改用它。Microsoft代码包中也有使用Direct2D的例子。这里的一些人:说TextRenderer在Vista+上速度较慢。你的经验是什么?我只关心Vista/7/+Microsoft的家伙Chris Jackson写了一篇很好的文章,他在文章中对tw进行了基准测试O:我在任何C库中找不到DrawCachedBitmap。所以如果有人感兴趣,我做了一个小的管理的C++包装器,使用C.C()的CaseDeBIT图。
graphics.DrawCachedBitmap(bitmap, 0, 0);