我们有一个两屏 DirectX 应用程序,之前使用 NVIDIA 8400GS (256MB) 以一致的 60 FPS(显示器同步速率)运行。但是,当我们将显卡换成 512 MB RAM 时,帧速率很难达到 40 FPS 以上。(它之所以这么高,是因为我们使用了三重缓冲。)这两张卡来自同一制造商 (PNY)。所有其他条件都相同,这是一个 Windows XP Embedded 应用程序,我们从每张卡的新图像开始。驱动程序版本号为 169.21。
应用程序都是 2D 的。IE 只是一堆纹理四边形和一大堆预渲染图形(因此需要升级卡的内存)。我们还拥有 CPU 动态解码的压缩动画 - 这涉及纹理锁定。锁定需要永远,但我也尝试使用单独的系统内存纹理供 CPU 更新,然后使用设备的 UpdateTexture 方法更新渲染的纹理。性能上没有总体差异。
尽管我已经阅读了我在 Internet 上可以找到的有关 DirectX 性能的所有常见问题解答,但这仍然是我第一次从事 DirectX 项目,因此您所拥有的任何神秘知识都会很有用。:)
当我谈到这个主题时,还有一件事;在交换链上调用 Present 时,无论我在当前参数 (PresentationInterval) 和调用本身的标志中都使用 D3DPRESENT_DONOTWAIT 的事实,DirectX 似乎都在等待当前完成。因为这是一个双屏应用程序,所以这是一个问题,因为两个监视器似乎没有同步锁定,我正在通过线程池运行 Present 调用来解决它。造成这种情况的根本原因是什么?