【发布时间】:2010-07-06 21:41:12
【问题描述】:
也许以前有人问过这个问题,但我找不到。我的问题很简单:用高级语言(Java、C#、Python)和 C 中的时间/性能关键函数编写应用程序是否有意义?或者在这一点上,除非您进行非常低级别的操作系统/游戏/传感器编程,否则拥有完整的 Java 应用程序都是一样的?
【问题讨论】:
标签: c performance
也许以前有人问过这个问题,但我找不到。我的问题很简单:用高级语言(Java、C#、Python)和 C 中的时间/性能关键函数编写应用程序是否有意义?或者在这一点上,除非您进行非常低级别的操作系统/游戏/传感器编程,否则拥有完整的 Java 应用程序都是一样的?
【问题讨论】:
标签: c performance
如果您 a) 注意到性能问题,并且 b) 使用性能测量来定位问题发生的位置,并且 c) 无法通过修改现有代码来实现所需的性能,那么这是有道理的。
如果其中任何一项不适用,则可能是过早的优化。
【讨论】:
如果您能流利地使用 Python 和 Lua 等高级语言并富有成效,那么请务必开始使用该语言进行写作。寻找瓶颈是否存在。
【讨论】:
速度可能与 C# 之类的东西非常相似。
棘手的是延迟。所以如果你想写一些你知道需要
话虽如此,对于非常紧凑的长循环(例如图像处理),C/C++ 之类的东西可以提供一些加速。你可以从 C# 中获得相当合理的性能,但你必须小心如何编程,但我发现总的来说,你仍然可以从 C/C++ 中榨取更多
【讨论】:
通常,您的首选语言会在可接受的时间内完成您需要的任何操作(呃,速度极快)。
当然,关键时间/性能函数可以用“更优化/合适”的语言(如 C 或汇编)编写 - 但它是否真的会让事情变得更快是另一回事。有一些法律规定了您将获得多少实际/整体加速,特别是Amdahs Law and (diminishing returns)。
要回答您的问题,如果有足够好的加速来保证额外的工作,那么用低级语言重写这些关键函数才有意义。
【讨论】:
我建议你阅读 Cliff Click 的优秀 Java vs. C Performance....Again.。它概述了 Java 和 C++ 之间的许多比较点。
可以预见,结论是视情况而定,但值得一读。
【讨论】:
你只能根据具体情况真正回答这个问题,如果不参考你在做什么,就不可能回答。
但也许你在这里真正想要的是某种健全性检查,以确保这种方法不会疯狂考虑。我从事的工具从非常大的图形应用程序(约百万行)到相对较小的物理模拟引擎(约 10000 行),正如您所描述的那样编写:Python 在外部用于接口(用于 API 和 GUI) , C/C++ 里面的繁重工作。他们都从这种责任分工中受益。
【讨论】:
这尤其适用于脚本语言。想到的是用 Python 制作的游戏。大多数时候,对于游戏的一些更多的数字运算方面来说,Python 太慢了,他们将其作为一个 C 模块来提高速度。确保您确实需要速度,并且数字运算是您的性能瓶颈,而不是一般的算法问题。在 C 和 Python 中对列表进行蛮力搜索都会很慢。
【讨论】:
我想说这在很大程度上取决于您的应用程序。 什么样的表现很重要?启动时间短?高吞吐量?低延迟?响应时间总是可预测的重要吗? 应用程序是短命的还是长时间运行的?
Java 可以为您提供高吞吐量,但在进行垃圾收集时偶尔会出现短暂的冻结。 C# 可能类似。 Python,好吧,对于任何不是用 C 编写的东西,那里的性能通常会落后于其他东西(有些东西是用 C 编写的,即使你不是自己写的)。
正如其他人所说。这取决于。
但与性能一样:首先衡量,当您知道需要时进行优化。
【讨论】: