Kev*_*oyd -2 .net c# c++ comparison performance
今天的事实是,几乎所有为PC,Xbox或PS3发布的AAA视频游戏都是用C++编写的.一些供应商说他们无法转向C#,因为他们内部重用的各种引擎的大型代码库已经在C++(物理,渲染等)中构建和测试.在性能方面,它是一个普遍接受的事实,即C++代码比C#运行得更快.
重新迭代:为什么专业游戏开发行业通常使用C++,为什么不呢?是因为一般的业务线应用程序不需要"你能得到的最佳性能"和交易可靠性(内存泄漏,OOB,堆栈溢出)的性能"并不重要"?或者仅仅是因为C++通常比使用C#编写的相同代码"更难维护"(模板,指针,malloc等)?
或者是因为在C++中开发比在C#中开发相同的功能集"更耗时",所以你不能实现你想要的那么多功能?但即便在今天,许多高端游戏开发工具包(如UDK和CryENGINE)完全用C++编写,其功能集是您在任何平台上获得的最佳功能.因此,如果C++对于这样的公司来说不是"更难"或"限制"或"更加困难",那么为什么它在游戏开发或科学/ HPC行业之外使用得如此之少?
它主要不是语言,而是平台.
在.Net中你不能使用SSE,你使用GPU的能力是有限的; 一些无锁多线程算法只能在本机代码中实现原始预期(版本化指针)(如果多线程很重要,一个有效的无锁结构可以提供极大的速度提升); 内存管理在.Net中是自动的,而在高性能场景中,您可以通过微管理内存(针对不同对象类型的单独小型堆)获得极大的速度优势,并且您可以通过内存进行向量 - 这也可以链接回SSE通常,您将有多个指针通过大缓冲区引导,将值提供给SSE操作.
仅举几例.
这些东西是商业应用程序通常不关心的事情,因为如果性能在这个级别真的至关重要,那么它很可能是它正在运行的服务器〜(桌面应用程序不太可能 - 即使在交易场景中它也可能是服务器这需要是实时的,而一个需要这种性能的企业只需要更快的机器就可以了; 或刀片中心.
在零售游戏环境中,它必须处理许多不同的硬件配置,因此尝试从用户运行的任何硬件中挤出最后一滴性能是有意义的.
我想更多的答案为什么C++被用来编码大多数游戏,而不是为什么.Net在商业中无处不在 - 当然,缺乏对这种性能潜力的需求是一个因素,因为我认为开发生命周期较短(一般来说)请讲).但是还有更多因素.
但在某些方面,这就像比较苹果和奶牛.您选择最适合问题的技术.
您始终需要优化应用程序的瓶颈.
在游戏中,引擎的速度对应用程序的性能至关重要.因此,优化在那里是有道理的.
在业务线,一个应用程序,它花费X毫秒等待数据库查询的执行,和Y << X毫秒绘制的用户界面和执行实际的"业务代码",优化Y并没有什么意义.由于X是这里的关键因素,因此数据库引擎通常用C,C++或其他一些"高性能"语言编写.
| 归档时间: |
|
| 查看次数: |
1586 次 |
| 最近记录: |