Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android性能:无用的全局变量与继承_Android_Performance_Inheritance - Fatal编程技术网

Android性能:无用的全局变量与继承

Android性能:无用的全局变量与继承,android,performance,inheritance,Android,Performance,Inheritance,假设我有一个对象A和B,它延伸了A。 B具有与A无关的全局变量(一个数组和几个计数器) 既然显式强制转换的成本很高(我不知道有多高),那么从纯粹的性能角度来看,只创建一个类a,只在需要时创建一个数组,这样我就不必强制转换了,这样会更好吗 我想问题是,一个对象的全局变量是否有任何代价,即使没有使用 编辑:忘记添加最重要的。。。显然是函数。显然,不,不要将两个类混合在一个类A中。永远不要。正如你提到的,数组与类A无关,所以不要把它放在类A中 接下来,在您的例子中,向下投射是一个提示:等等,程序员,您

假设我有一个对象A和B,它延伸了A。 B具有与A无关的全局变量(一个数组和几个计数器)

既然显式强制转换的成本很高(我不知道有多高),那么从纯粹的性能角度来看,只创建一个类a,只在需要时创建一个数组,这样我就不必强制转换了,这样会更好吗

我想问题是,一个对象的全局变量是否有任何代价,即使没有使用


编辑:忘记添加最重要的。。。显然是函数。

显然,不,不要将两个类混合在一个类A中。永远不要。正如你提到的,数组与类A无关,所以不要把它放在类A中

接下来,在您的例子中,向下投射是一个提示:等等,程序员,您想多想想吗?有时,有一种解决方案不需要向下投射。但是

因为显式铸造成本很高

我不这么认为。有一些基准测试和扩展告诉我们,这里没有很大的区别


所以。遵循第一种解决方案…

近年来,继承通常被视为代码气味,因为它可能导致不同的问题:

如果我们从纯性能的角度来讨论,一个空数组在RAM中大约需要8个字节(4个字节存储长度,4个字节作为引用,但它有点依赖于平台:)。因此,即使有一千个这样的对象,一个数组字段在RAM中也需要大约1000*8字节~8KB

正如您可能知道的,现在的手机通常包含超过1 GB的RAM。但是,不要忘记,您的应用程序通常可以占用60到192 MB的RAM()

在任何情况下,不计算添加到类中的每个小字段就足够了

然而,回到我的第一句话,我建议您考虑使用组合而不是继承来解决问题,正如在

更新
关于性能,我建议您阅读本主题:您确定需要这种类型的过早优化吗?或者这更多的是一个理论问题而不是实际问题

既然显式铸造是昂贵的(我不知道多少),它会吗 从纯粹的性能角度来看,最好只创建a级和 仅在需要时创建阵列,这样我就不必强制施放

除了关于演员费用的可疑声明,也许我是误解了,但这给我带来了危险信号。如果您的设计涉及到将对象强制转换为子类,那么可以通过其他方式进行更好的设计。我不能不看更多的东西就说什么,但是铸造的需要往往是设计失败的标志*。正如Gaket所建议的,构图可能会更好,或者可能会有其他的改变——工厂模式

第二,只有当你注意到一个性能问题,或者有真正的理由认为会有一个性能问题时,你才应该关心性能。处理器所做的几乎任何事情都会非常快,除非它做了很多次(比如数百万次)。您的性能问题(除非您的程序在某些方面异常)很可能是I/O或内存问题。然后,在确定性能瓶颈后,修复它的步骤是:

  • 设定目标
  • 修理
  • 不要遗漏任何步骤


    *我知道角色扮演是Android编程的核心部分,因为每次你获得视图时都要进行视图的播放,我想知道是否有更好的方法可以做到这一点,但这正是我们所面临的问题

    如果播放失败怎么办?@Zuokuk使用
    instanceof
    关键字来回答这个问题,就性能而言,使用一个类更好?这取决于:1)您将拥有的对象数量2)您的用例:您将如何使用这些对象。你能用这些附加信息更新你的问题吗?