使用Direct3D时使用C ++而不是C#有什么好处吗?

时间:2011-04-28 22:46:37

标签: c# c++ directx direct3d

使用Direct3D时使用C ++而不是C#有什么好处吗?我发现C ++和DirectX的教程都使用Direct3D(据我所知,它是托管的)。同样,我发现的所有C#教程都是针对Direct3D的。

Direct3D是否受到管理? 在这两种语言中使用D3D有什么区别吗?

3 个答案:

答案 0 :(得分:10)

DirectX完全是原生的。您可能拥有的任何印象都是完全错误的。有托管的包装器,允许您从托管代码中使用DirectX。此外,DirectX被编程为可以从C ++或C或类似语言访问。如果你看看SlimDX项目,他们遇到了很多问题,特别是由于资源收集,因为C#并不真正支持自动收集非内存资源,而using不会削减芥末。此外,游戏编程可能会占用大量CPU资源,而且使用托管语言造成的额外性能损失通常是站不住脚的,几乎所有现有的支持库都是针对C或C ++的。

如果你想制作一个小游戏,或类似的东西,那么什么都没有阻止你使用托管代码。但是,我知道没有商业游戏真正走这条路。

答案 1 :(得分:2)

Direct3D的目的是将渲染从CPU移到GPU上。如果存在显着的性能差异,则会在CPU上运行该代码。因此,我不认为与Direct3D接口的代码部分的本机代码和托管代码之间应该存在任何显着的性能差异。

Direct3D本身不是托管代码。

答案 2 :(得分:0)

这取决于你正在做什么。正如David Heffernan所说,Direct3D的目标之一是尽可能多地处理GPU。随着顶点着色器,像素着色器等的出现,我们比以往更接近现实。

当然,给定无限的时间和资源,您通常可以在C ++中创建比C#更高效的算法。这将影响CPU级别的性能。今天,与图形无关的处理仍主要在CPU上完成。有一些像CUDA,OpenCL,甚至DirectX的未来版本,这将开启将任何并行友好算法移动到GPU的可能性。但是这些技术(以及支持它的显卡)的采用率还不是主流。

那么你应该考虑使用什么类型的CPU密集型算法?

  • 人工智能
  • 粒子引擎/ n体模拟
  • 快速傅立叶变换

这些只是我能想到的第一件事。至少前两个在今天的游戏中很常见。人工智能通常在游戏中以折衷的方式完成,以便尽快运行,因为它可能是处理器密集型的。然后粒子引擎无处不在。