Performance 有没有关于独立于语言的性能提示的资源?

Performance 有没有关于独立于语言的性能提示的资源?,performance,Performance,我和许多人一起工作,他们以制作电子游戏为生。我有一点C++的知识,我知道一些日常使用的通用性能策略。比如使用前缀+/-而不是后缀 我的问题是,很多时候人们来找我,给他们一些关于编程时可以定期进行的一般优化的建议,但是这些人经常用各种语言编程。一些使用C++、C语言、java、ActionScript等。 我想知道是否有一些通用的性能提示可以在日常编程的基础上使用?例如,我建议使用另一种语言编程的人使用前缀++/--而不是后缀,但我不确定这是否正确 我的猜测是,这是特定于语言的,进行一般优化的最佳

我和许多人一起工作,他们以制作电子游戏为生。我有一点C++的知识,我知道一些日常使用的通用性能策略。比如使用前缀+/-而不是后缀

我的问题是,很多时候人们来找我,给他们一些关于编程时可以定期进行的一般优化的建议,但是这些人经常用各种语言编程。一些使用C++、C语言、java、ActionScript等。 我想知道是否有一些通用的性能提示可以在日常编程的基础上使用?例如,我建议使用另一种语言编程的人使用前缀++/--而不是后缀,但我不确定这是否正确


我的猜测是,这是特定于语言的,进行一般优化的最佳方式是确保您没有使用过于臃肿的算法,但可能有人会提出一些建议。

我认为您无法将优化概括为这样的优化。为了优化执行时间,您需要深入研究该语言,并详细了解事情是如何工作的。仅仅猜测或假设其他语言的使用经验是行不通的!例如,写
x=x我想你需要把它分成两个独立的问题:

1) 是否有语言不可知的方法来查找性能问题?对个人资料,但是

2) 是否有与语言无关的方法来解决性能问题?视情况而定

语言不可知论的一般原则是:先做(1)再做(2)。
换句话说,准备射击,而不是准备射击


,但它可以是任何语言。

如果不深入讨论语言细节,甚至不知道这是嵌入式、web、CAD、游戏还是iPhone编程,就没有什么可说的了。我们所知道的是,涉及到多种语言,并且由于一些未知的原因,性能总是比期望的慢

首先,检查你的算法。缓慢的算法可能会导致糟糕的性能。阅读算法及其复杂性

第二,注意是否有任何非常缓慢的操作,例如敲击数据库、传输信息或移动机器人手臂。看看程序是否做得比它应该做的更多

第三,个人资料。如果有一段代码占用了5%的时间,那么任何优化都不会使您的程序快5%以上。如果一段代码占用了很多时间,那么值得一看


第四,找一个知道他们在做什么的人来做任何特定的优化。完成后对其进行测试,以确保它们确实提高了性能。当性能成为一个问题时,我已经用一些违反直觉的措施来改进它,比如卷起循环。

问了这个问题后,我学到了一些东西:

  • I/O操作通常是性能最昂贵的操作。在执行磁盘或网络I/O时尤其如此(这通常是最昂贵的,因为如果您必须等待另一台主机的响应,则必须等待远程主机执行的所有处理和I/O操作)。只在绝对必要时执行这些操作,并且可能考虑在可能的情况下使用缓存。

  • 由于网络/磁盘I/O以及与SQL之间的转换时间,数据库操作可能非常昂贵。使用内存中的DB或缓存有助于减少I/O问题,一些(不是全部)NoSQL数据库可以减少SQL转换时间

  • 只记录重要信息。使用类似的日志库可能会有所帮助,因为您可以在应用程序中将日志记录放在心中,但您可以将每条消息设置为特定的日志级别。无论您将应用程序设置为哪个日志级别,都将只记录该级别或更高级别的消息。这样,如果您需要对功能进行故障排除,您只需更改快速配置并重新启动应用程序即可获得其他消息。然后,当您完成后,只需将应用程序返回到默认级别,这样您就不会经常登录

  • 仅包括所需的功能。额外的功能可能很好,但可能会增加处理时间,为应用程序的失败提供额外的位置,并花费您的团队开发时间,这些时间可能会花在更重要的任务上

  • 正确使用和配置内存管理器。垃圾收集例程如果配置不正确,可能会降低性能。若每一分钟你们的应用程序都会因为垃圾收集而冻结一两秒钟,那个么你们的客户可能不会高兴

  • 仅在发现性能问题后配置文件。探查器会使应用程序的性能看起来更差,因为您的应用程序和探查器运行在同一台主机上,消耗相同的硬件资源

  • 不要过早地进行性能调整。您可以采取的一般做法是,在每种语言中的性能应该更好,但是在应用程序开发的中间启动性能调整会花费大量的开发空间,因为仍有功能要添加。

  • 这不一定有助于提高性能,但可以将类依赖性保持在最低限度。当您开始进行性能调优时,很有可能您必须重写代码的整个部分,如果您正在进行性能调优的部分有很多依赖项,那么破坏代码的可能性就越大。它通常会对domino产生影响,因为在修复性能问题之后,您必须修复所有依赖项,可能还包括原始依赖项的依赖项。对于一个有很多依赖关系的应用程序,几个小时的性能调优练习估计很快就会变成几个月

  • 如果性能是一个问题