今天的事实是,几乎所有针对PC,Xbox或PS3发布的AAA视频游戏都是用C ++编写的。一些供应商说他们无法转向C#,因为他们内部重用的各种引擎的大型代码库已经在C ++(物理,渲染等)中构建和测试。在性能方面,它是一个普遍接受的事实,C++ code runs faster than C#。
重新迭代:为什么专业游戏开发行业通常使用C ++,为什么不使用C ++?是否因为一般的业务线应用程序不需要“性能最佳”和交易可靠性(内存泄漏,OOB,堆栈溢出)的性能“并不重要”?或者仅仅是因为C ++通常比使用C#编写的相同代码“更难维护”(模板,指针,malloc等)?
或者是因为C ++中的开发比在C#中开发相同的功能集“更耗时”,所以你不能实现你想要的那么多功能?但即使在今天,许多高端游戏开发工具包(例如UDK和CryENGINE)完全用C ++编写,他们的featureset是你可以在任何平台上获得的最好的。 因此,如果C ++对于这些公司来说不是“更难”或“限制”或“更加困难”,那么为什么它在游戏开发或科学/高性能计算行业之外的使用如此之少呢?
答案 0 :(得分:8)
主要不是关于语言,而是平台。
在.Net中你不能使用SSE,你使用GPU的能力有限;一些无锁多线程算法只能在本机代码中实现原始预期(版本化指针)(如果多线程很重要,一个有效的无锁结构可以提供极大的速度提升);内存管理在.Net中是自动的,而在高性能场景中,您可以通过微管理内存(针对不同对象类型的单独小型堆)获得极大的速度优势,并且您可以通过内存进行向量 - 这也可以链接回SSE通常你会有多个指针通过大缓冲区引导,将值输入到SSE操作中。
仅举几例。
这些东西是商业应用程序通常不关心的事情,因为如果性能在这个级别真的至关重要,那么它很可能是它正在运行的服务器〜(桌面应用程序不太可能 - 即使在交易场景中它也可能是需要实时的服务器,而需要这种性能的企业只需要更快的机器;或刀片中心。
在零售游戏环境中,它必须处理许多不同的硬件配置,因此尝试从用户运行的任何硬件中挤出最后一滴性能是有意义的。
我想更多的答案为什么C ++用于编码大多数游戏,而不是为什么.Net在商业中无处不在 - 当然,缺乏对这种性能潜力的需求是一个因素,因为我认为开发寿命更短循环(一般来说)。但是还有更多因素。
但在某种程度上,这就像比较苹果和奶牛一样。您选择最适合问题的技术。
答案 1 :(得分:5)
您始终需要优化应用程序的瓶颈。
在游戏中,引擎的速度对应用程序的性能至关重要。因此,优化在那里是有意义的。
在业务线应用程序中,花费X ms等待执行数据库查询,并且Y<< X ms绘制用户界面并执行实际的“业务代码”,优化Y 不是有意义的。由于X是这里的关键因素,因此数据库引擎通常用C,C ++或其他一些“高性能”语言编写。
答案 2 :(得分:4)
简而言之:C或C ++使您能够在较低级别处理更多细节,因此您可以从可能的地方获得性能和内存增益,这确实是必需的,因为游戏需要相当高的性能要求用于连续绘制和重绘事物。
然而,bussines line应用程序通常不需要这些细节,因为首先它们不需要执行需要密集工作的“操作”,以便允许使用托管代码,即使这会给您带来某些惩罚,但它们不是很容易观察到的原因物理工作量较低。所以重点是使用正确的工具来做正确的工作。你不使用踏板车做农业,你不需要拖拉机来运送披萨。