2010-09-01 50 views
4

我是一个android的完整noob,但我一直在编程c#很长一段时间。我正在编写一个android应用程序,并且已经到了一个地步,我的c#程序员想要开始创建一个松散耦合的设计,并使用接口将代码移入不同的层,等等。android,面向对象程序设计vs性能设计

但是后来我偶然发现了Designing for performance它告诉我的指导原则避免创建对象然后它也会说优化司法

我是否只是基于良好的设计进行构建,然后在出现性能问题时进行处理?

我想要做的最后一件事是通过构建应用程序的工作并使其性能很差。 有人可以指点我设计的一些应用程序的例子,具有良好的性能或只是提出一些建议?

感谢

+1

在移动设备上的性能是至关重要的。基于您正在开发的平台的约束进行设计。 – 2010-09-01 23:45:28

回答

5

我发现AndEngine是相当精心设计的,它必须与性能关注,因为它是一个游戏开发库 - 所以你可能会拉低它的拷贝和读取源。

在“性能设计”的文件,我想指出这种说法:

注意,虽然该文件 主要涵盖微型优化, 这些几乎从来不会做或打破 软件。 选择合适的 算法和数据结构应该是 总是你的优先级,但是 超出了本文的范围。

一个例子就是创建一个粒子系统。建模它的一个好方法是拥有一个包含粒子对象集合的粒子系统对象......也许这些粒子实现粒子接口......这不是避免创建对象的地方。但是,出于性能方面的原因,您将希望优化粒子系统以回收粒子对象,而不是每次从粒子系统产生时从头开始创建它们。

就个人而言,我还没有发现性能是一个限制因素,但我认为这将取决于您正在构建的应用程序类型。

我的意见是先建立一个合适的设计,测试性能,并从那里进行优化。

+0

谢谢!我在手机上安装了AndEngine,而且根本没想过去看它的来源。选择更好的设计是我如何倾斜,我只需要确认。 – bytebender 2010-09-03 15:48:39

1

作为一般规则,要做的事情是保持数据结构尽可能简单和标准化。就像不要仅仅因为它们很容易被抓到就抛出哈希表数据结构。知道如何进行性能分析(here's my method),如果你有一个真正的性能问题,然后修复它。否则,越简单越好,即使这意味着简单的数组,列表和O(N)循环。

保持数据结构规范化的原因是,如果不是,那么它可能具有不一致的状态,并且您会很强烈地写出通知样式的代码来试图保持它的一致性。那些可能是真正的表演杀手。如果你这样做,分析将告诉你这是发生了什么。 如果您必须拥有冗余数据,我认为最好能够容忍一些暂时的不一致性,并通过传递数据定期修复。这比通过通知强烈保证始终如一的一致性要好。

非标准化数据结构的另一个问题是它可能有很多对象的创建和销毁。这也可能是一个真正的性能杀手,虽然你可以通过泳池技术来改善它。

2

更加注重高德纳的报价出现在同一篇文章中:

“我们应该忘记小 效率,讲的 时间约97%:过早的优化是所有的 根邪恶的根源。“

然后,如果你是在处理与其他3%你会看到...

+1

他正在手机上编写消费者应用程序。 *先验*他在3%,我希望苹果的人们在扼杀我的iPhone之前一直牢记在心。 – Crashworks 2010-09-02 02:26:26