C#WinForms - 任何人都知道C#GDI库而不是SLOW GDI +

Joe*_*Joe 14 c# gdi+ gdi winforms

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

有没有人创建.NET GDI库,所以我们可以有速度?

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

Ian*_*oyd 25

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

这就是为什么.NET 2.0包含一个TextRenderer包装GDI DrawText的新类.它有两种静态方法:

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

  • Graphics.MeasureString
  • Graphics.DrawString

(如果你关掉 UseCompatibleTextRendering)


绘制a Bitmap在GDI +中也很慢,这就是你使用的原因CachedBitmap.它非常迅速.

CachedBitmap对象存储在被用于显示优化的特定装置上的格式的位图.要显示缓存的位图,请调用Graphics :: DrawCachedBitmap方法.

graphics.DrawCachedBitmap(bitmap, 0, 0);
Run Code Online (Sandbox Code Playgroud)

也可以看看

  • 我无法在任何C#库中找到DrawCachedBitmap.因此,如果有人感兴趣我创建了一个小的托管C++包装器来使用C#中的CachedBitmap(https://github.com/svejdo1/CachedBitmap) (3认同)

Bra*_*etz 7

看过SlimDX了吗?它有一个围绕Direct2D的托管包装器,它是一个完全硬件加速的2d API,并且与传统的GDI混合得很好.

编辑:

我也发现这个库你可能会感兴趣:SharpDX

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

这也支持Direct2D.


Ver*_*cas 2

您可以尝试迁移到 WPF。
我这样做是因为 WinForms 绘制速度很慢。
这种转变非常困难,尤其是对于像我这样的老式程序员。

但 WinForms 在启动速度和 RAM 方面无法被击败。
WPF 启动缓慢并占用大量 RAM。