在.NET GDI类上使用Win32 API调用

本文关键字:Win32 API 调用 NET GDI | 更新日期: 2023-09-27 18:24:44

我有一个用C#开发的winforms应用程序,它涉及到大量的屏幕绘制。该绘制涉及自定义控件和其他二维对象的渲染。现在的问题是,绘制整个屏幕大约需要4到5秒。我已经将代码优化到一个级别,即所有所需的数据都可以在内存中使用,而不是从磁盘或网络中读取。

为了进一步减少渲染时间,我计划使用以下选项

  1. 直接调用Win32API公开的GDI函数,而不是使用.NET 提供的GDI类

  2. 使用DirectX,因为我听说它在渲染方面效率很高。我的应用程序不涉及任何类型的3D渲染。

请帮我决定选择哪个选项?除此之外,还有其他选择吗,比如任何高性能的第三方组件或库。

在.NET GDI类上使用Win32 API调用

根据个人经验:

  • GDI+仅比GDI慢<2.从.NET(使用GDI+)切换到纯GDI并没有多大帮助。

  • Direct2D和GDI一样慢——至少在绘制基本形状时是这样。所以,除非你在做一件更复杂的事情,否则可能不会有帮助。

你最好的办法是减少绘图,并加倍缓冲数据。

如果它不起作用,您可能希望在内存中生成位图(使用byte[]或其他东西,完全避免使用图形API),并简单地将其直接blit(复制)到屏幕上。这很难,但它几乎总是最快的。