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

时间:2012-02-14 06:59:08

标签: c# .net winapi gdi+ win32gui

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

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

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

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

  3. 请帮我决定选择哪个选项?是否有任何其他选项,如任何高性能第三方组件或库。

1 个答案:

答案 0 :(得分:1)

从个人经验来看:

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

  • Direct2D和GDI一样慢 - 至少对于绘制基本形状。因此,除非你做的事情要复杂得多,否则它可能无济于事。

最好的办法是减少绘图,并对数据进行双重缓冲。

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