意见 - 一种务实的绩效方法

2019-09-07 13:29

  • 正文

[在此转载的#altdevblogaday-opinion文章中,BitSquid的联合创始人Niklas Frykholm分享了他的表现方法以及他如何确保他的系统运行得体,而不会影响其他目标。]

过早优化是万恶之源吗?或者是后来对能的态度将程序员从骄傲的“计算机科学家”转变为卑鄙的“脚本小子”?

这些问题没有明确的答案,但在本文中我将尝试描述我自己的绩效方法。我如何确保我的系统运行良好,而不会影响其他目标,例如模块化,可维护和灵活。

程序员时间是有限的资源

如果你正在编写一个大程序,代的某些部分将不会像理论上那么快。对不起,让我改一下。如果您正在编写一个大型程序,那么的代将在理论上尽可能快。是的,我认为可以合理地假设您的代的每一行都可以更快地运行。

编写快速软件并不是最重要的。这是关于重要的好表现。如果你花了三个星期来优化一小段代,只需要一次调用一次,那么就可以花三周时间做一些更有意义的工作。如果你花了它来优化实际重要的代,你甚至可以对游戏的帧速率做出重大改进。

没有足够的时间来添加所有能,修复所有错误并优化所有代,因此目标应该始终是最小的能,以最小的努力。

不要低估简洁的力量

简单的解决方案比复杂的解决方案更容易实现但这只是冰山一角。从长远来看,简单解决方案的真正好处。简单的解决方案更易于理解,更易于调试,更易于维护,更易于移植,更易于分析,更易于优化,更易于并行化和更易于更换。随着时间的推移,所有这些节省都会增加。

使用简单的解决方案可以节省大量时间,即使它比更复杂的解决方案更慢,整个程序运行速度也会更快,因为您可以使用保存的时间来优化代的其他部分。真正重要的部分。

我只在合理的情况下使用复杂的解决方案。即当复杂的解决方案明显快于简单的解决方案(大约2左右)时,以及它在一个重要的系统中(占用相当大的帧时间百分比)。

当然,简直在旁观者的眼中。我认为数组很简单。我认为POD数据类型很简单。我认为blob很简单。我不认为具有12级继承的类结构很简单。我不认为在8个策略类参数上模板化的类很简单。我不认为几何代数很简单。

利用系统设计机会

有些人似乎认为,为了避免“过早优化”,你应该设计你的系统而不考虑任何能。你应该把一些东西放在一起,然后在“优化”代时修复它。

我全心全意地不同意。不是因为我本身就喜欢表演,而是出于纯粹的务实原因。

在设计系统时,您可以清楚地了解不同部件如何组合在一起,需求是什么以及调用不同能的频率。在这一点上,花一些时间思考系统将如何执行以及如何设置数据结构以使其尽可能快地运行并不需要额外的努力。

相比之下,如果您在不考虑能的情况下构建系统并且必须在稍后“进行修复”,那将会更加困难。如果必须重新排列基础数据结构或添加多线程支持,则可能必须从头开始重写整个系统。只有现在系统处于生产阶段,因此您可能会受到已发布的API和其他系统的依赖的。

此外,您不能破坏正在使用该系统的任何项目。自从你(或其他人)编写代几个月后,你必须首先理解所有的想法。并且随着时间的推移而添加的所有小错误修复和能调整很可能在重写时丢失。你将重新开始一批新的bug。

因此,只需遵循我们的一般准则“最大效率 [在此转载的#altdevblogaday-opinion文章中,BitSquid的联合创始人Niklas Frykholm分享了他的表现方法以及他如何确保他的系统运行得体,而不会影响其他目标。]

过早优化是万恶之源吗?或者是后来对能的态度将程序员从骄傲的“计算机科学家”转变为卑鄙的“脚本小子”?

这些问题没有明确的答案,但在本文中我将尝试描述我自己的绩效方法。我如何确保我的系统运行良好,而不会影响其他目标,例如模块化,可维护和灵活。

程序员时间是有限的资源

如果你正在编写一个大程序,代的某些部分将不会像理论上那么快。对不起,让我改一下。如果您正在编写一个大型程序,那么的代将在理论上尽可能快。是的,我认为可以合理地假设您的代的每一行都可以更快地运行。

编写快速软件并不是最重要的。这是关于重要的好表现。如果你花了三个星期来优化一小段代,只需要一次调用一次,那么就可以花三周时间做一些更有意义的工作。如果你花了它来优化实际重要的代,你甚至可以对游戏的帧速率做出重大改进。

没有足够的时间来添加所有能,修复所有错误并优化所有代,因此目标应该始终是最小的能,以最小的努力。

不要低估简洁的力量

简单的解决方案比复杂的解决方案更容易实现但这只是冰山一角。从长远来看,简单解决方案的真正好处。简单的解决方案更易于理解,更易于调试,更易于维护,更易于移植,更易于分析,更易于优化,更易于并行化和更易于更换。随着时间的推移,所有这些节省都会增加。

使用简单的解决方案可以节省大量时间,即使它比更复杂的解决方案更慢,整个程序运行速度也会更快,因为您可以使用保存的时间来优化代的其他部分。真正重要的部分。

我只在合理的情况下使用复杂的解决方案。即当复杂的解决方案明显快于简单的解决方案(大约2左右)时,以及它在一个重要的系统中(占用相当大的帧时间百分比)。

当然,简直在旁观者的眼中。我认为数组很简单。我认为POD数据类型很简单。我认为blob很简单。我不认为具有12级继承的类结构很简单。我不认为在8个策略类参数上模板化的类很简单。我不认为几何代数很简单。

利用系统设计机会

有些人似乎认为,为了避免“过早优化”,你应该设计你的系统而不考虑任何能。你应该把一些东西放在一起,然后在“优化”代时修复它。

我全心全意地不同意。不是因为我本身就喜欢表演,而是出于纯粹的务实原因。

在设计系统时,您可以清楚地了解不同部件如何组合在一起,需求是什么以及调用不同能的频率。在这一点上,花一些时间思考系统将如何执行以及如何设置数据结构以使其尽可能快地运行并不需要额外的努力。

相比之下,如果您在不考虑能的情况下构建系统并且必须在稍后“进行修复”,那将会更加困难。如果必须重新排列基础数据结构或添加多线程支持,则可能必须从头开始重写整个系统。只有现在系统处于生产阶段,因此您可能会受到已发布的API和其他系统的依赖的。

此外,您不能破坏正在使用该系统的任何项目。自从你(或其他人)编写代几个月后,你必须首先理解所有的想法。并且随着时间的推移而添加的所有小错误修复和能调整很可能在重写时丢失。你将重新开始一批新的bug。

因此,只需遵循我们的一般准则“最大效率

上一篇:地铁站完全像角色扮演游戏地下城

下一篇:新的Wolfenstein演示,地图可用