大约在2012/2013年用.NET(特别是VB)开发游戏,性能与C++;

大约在2012/2013年用.NET(特别是VB)开发游戏,性能与C++;,.net,vb.net,game-engine,.net,Vb.net,Game Engine,因此,随着微软最新版本的Visual Studio的发布,他们似乎增加了一些性能提升。硬件的功率也在增加,我很好奇: 在VB中开发的游戏是否足够快,用户不必注意C++开发游戏的不同? 取决于游戏类型;例如,在一个简单的2D棋盘游戏中,渲染和计算并不复杂,用户也不太可能看到任何不同。如果游戏需要实时呈现反应灵敏的3D图形,那么总会有不同。或者对于复杂的人工智能(比如国际象棋),由于内存被垃圾回收,大量的数据肯定会使VB程序的速度减慢一点。不过,在你真正测量之前,你永远不会知道 我最近读了一篇关于托

因此,随着微软最新版本的Visual Studio的发布,他们似乎增加了一些性能提升。硬件的功率也在增加,我很好奇:


在VB中开发的游戏是否足够快,用户不必注意C++开发游戏的不同? 取决于游戏类型;例如,在一个简单的2D棋盘游戏中,渲染和计算并不复杂,用户也不太可能看到任何不同。如果游戏需要实时呈现反应灵敏的3D图形,那么总会有不同。或者对于复杂的人工智能(比如国际象棋),由于内存被垃圾回收,大量的数据肯定会使VB程序的速度减慢一点。不过,在你真正测量之前,你永远不会知道


我最近读了一篇关于托管语言性能的文章,以及JIT有时如何比提前的编译器优化更好,但我忘了它在哪里了。我想这是很容易收集的;您可能想看看它和一般的JIT优化(请记住,VB和C都编译成IL,然后进行解释)。

我一直在用C编写一个第一人称射击游戏,用于OpenGL/OpenAL绑定,目前进展非常顺利。有一些潜在的陷阱,并且在IL和C++之间总是有一些可测量的速度差,但是如果你小心,你可以把这个差异最小化到一个最终用户不会注意到的地方。 将尽可能多的工作卸载到GPU。如果不小心,顶点处理CPU端会降低帧速率,尤其是在使用动画和粒子效果时。在GPU上的工作速度与C++游戏相同(虽然方法调用可能会使它稍微昂贵一点,所以尝试使用VBOS/VAOS等)

定期对你的游戏进行简介。检查每帧分配的对象数量,并尝试减少分配数量,理想情况下,将所有分配偏移到初始化。此外,不要害怕在严密的数学循环中使用
不安全的
块,这会阻碍你的游戏。使用对象池可以帮助您在运行游戏时减少分配


如果您需要3D物理,我发现在运行时不生成大量垃圾并在必要时使用对象池是非常好的。

您可以阅读这段代码,并看到管理语言DX11 API和本机C++性能之间的一些差异。一个小但重要的点:VB/C编译到IL,然后JIT’ed为本机代码-不解释。JIT只能在至少运行一次非优化代码IIRC之后发生。因此,必须首先对其进行解释。另外,我非常怀疑整个JIT过程是否如此之快以至于我们可以跳过它-这会导致一些初始开销。@Bartek您是对的,代码在第一次运行函数时就被JIT了(因此刚好及时)。但是,使用microsoft提供的NGEN工具,您可以获取程序集并从中生成本机映像。当涉及到这类事情时,我建议将一个测试用例放在一起measure@iamkrillin值得注意的是,XNA不再被开发。他们,downvoter,您至少可以删除一条评论(注意它已经是+2)