我是android的完整菜鸟,但我已经编程了很长时间的c#。我正在编写一个Android应用程序并且已经达到了这样的程度:我的c#程序员想要开始创建一个松散耦合的设计,并使用接口等将代码移动到不同的层中。
但后来我偶然发现了Designing for performance指导我避免创建对象的指南,然后它也说优化司法。
我是否只是基于良好的设计构建,然后在出现性能问题时处理它们?
我要做的最后一件事是完成构建应用程序的工作,并使其表现不佳。 有人能指出一些设计良好且性能良好的应用示例,或仅提出一些建议吗?
由于
答案 0 :(得分:5)
我发现AndEngine设计得相当好,而且必须关注性能,因为它是一个游戏开发库 - 所以你可以下载它的副本并阅读源代码。
在“为性能设计”文档中,我会指出这句话:
注意虽然这个文件 主要涵盖微优化, 这些几乎不会成败 你的软件。 选择正确的 算法和数据结构应该 永远是你的首要任务,但是 超出本文档的范围。
这方面的一个例子是创建一个粒子系统。对它进行建模的一个好方法是使用一个包含Particle对象集合的ParticleSystem对象......也许那些粒子实现了一个粒子界面...这不是避免对象创建的地方。但是,出于性能原因,您需要优化ParticleSystem以回收Particle对象,而不是每次生成时都从头开始创建它们。
就个人而言,我没有发现性能是一个限制因素,但我认为这将取决于您正在构建的应用程序类型。
我的意见是首先建立一个合适的设计,测试性能,并从那里进行优化。
答案 1 :(得分:2)
更多关注同一文章中出现的Donald Knuth的引用:
“我们应该忘记小事 效率,约占97% 时间:过早优化是 所有邪恶的根源。所有邪恶的根源。“
然后,如果你正在处理其他3%,你会看到......
答案 2 :(得分:1)
作为一般规则,要做的是保持数据结构尽可能简单和规范化。就像不仅仅因为它们易于抓取而抛出哈希表数据结构一样。知道如何进行性能分析(here's my method),如果遇到真正的性能问题,请修复它。否则,越简单越好,即使这意味着简单的数组,列表和O(N)循环。
保持数据结构规范化的原因是,如果不是,则它可能具有不一致的状态,并且您将有强烈的诱惑来编写通知样式代码以尝试保持其一致性。那些可能是真正的表演杀手。如果你这样做,分析会告诉你它正在发生的事情。 如果你必须有冗余数据,我认为最好能够容忍一些暂时的不一致,你可以通过传递数据来定期修复。这比通过通知始终强烈保证一致性更好。
非标准化数据结构的另一个问题是它可能有很多对象创建和破坏。这也可能是一个真正的性能杀手,尽管你可以用池技术来改善它。