具有C函数的高级语言

时间:2010-07-06 21:41:13

标签: c performance

可能以前曾经问过,但我找不到它。我的问题很简单:用C语言编写更高级语言(Java,C#,Python)和时间/性能关键函数是否有意义?或者在这一点上,除非你进行非常低级别的操作系统/游戏/传感器编程,否则拥有一个完整的Java应用程序就完全相同了?

8 个答案:

答案 0 :(得分:7)

如果你a)注意到性能问题,并且b)使用性能测量来确定问题发生的位置,并且c)通过修改现有代码无法实现所需的性能,这是有意义的。

如果这些项目中的任何一项不适用,则可能是过早优化。

答案 1 :(得分:3)

如果你能用更高级的语言(如Python和Lua)流利而富有成效,那么一定要用这种语言开始写作。如果存在瓶颈,请寻找瓶颈。

答案 2 :(得分:1)

通常,您的首选语言会在可接受的时间内完成您需要的任何操作(呃,快速开始)。

当然,关键时间/性能函数可以用“更优/更合适”的语言(如C或汇编语言)编写 - 但它是否真的能让事情变得更快是另一回事。有法律规定您将获得多少实际/整体加速,特别是Amdahs Law and (diminishing returns)

要回答您的问题,只有在足够快的速度下才能保证额外的工作时,才能用较低的语言重写这些关键功能。

答案 3 :(得分:1)

速度与C#之类的东西非常相似。

什么是棘手的是延迟。所以如果你想写一些你知道的东西< 10毫秒然后C是可以合理预测的(忽略操作系统可能引入的任何变化)。

已经说过非常紧凑的长循环(例如图像处理),像C / C ++这样的东西可以提供一些加速。你可以从C#中获得相当合理的性能,你必须要小心你如何编程它,但我发现一般来说,你仍然可以从C / C ++中挤出更多

答案 4 :(得分:0)

我建议您阅读Cliff Click的优秀Java vs. C Performance....Again.。它概述了Java和C ++之间的许多比较点。

可以预见,结论是它取决于,但这是值得一读的。

答案 5 :(得分:0)

你只能根据具体情况真正回答这个问题而不参考你正在做的事情,这是不可能回答的。

但也许你真正想要的是某种健全性检查,以确保这种方法不是疯狂的考虑。我已经研究过各种工具,从非常大的图形应用程序(〜百万行)到相对较小的物理模拟引擎(~10000行),就像你描述的那样编写:外部的Python接口(用于API和用于GUI) ,C / C ++在内部进行繁重的提升。他们都从这种责任分工中受益。

答案 6 :(得分:0)

这尤其适用于脚本语言。我想到的是用Python制作的游戏。大多数时候,Python对于游戏的一些数字运算方面来说太慢了,而且它们使得它成为速度的C模块。确保你确实需要速度,而数字运算是你的性能瓶颈,而不是一般的算法问题。在C和Python中,对列表进行暴力搜索的速度会很慢。

答案 7 :(得分:0)

我会说这很大程度上取决于你的申请。 什么样的表现很重要?启动时间短?高吞吐量?低延迟?响应时间始终可预测是否重要? 申请是短期存在还是长期运行?

Java可以为您提供高吞吐量,但在进行垃圾回收时偶尔会出现短暂冻结。 C#可能很相似。 Python,对于那些没有用C语言编写的东西,有些东西往往会落后于其他东西(有些东西是用C语言编写的,即使你没有自己编写)。

正如其他人所说。这取决于。

但与性能一如既往:先测量,然后在您知道需要时进行优化。