【问题标题】:Variable access performance可变访问性能
【发布时间】:2011-05-20 19:20:49
【问题描述】:

我正在开发一个具有 DataManager 类的应用程序,该类包含一个 ArrayList<Object[]>。由于此 ArrayList 需要在其他类中使用,考虑到此应用程序将在 Android 平台上运行,我想知道访问此列表的最有效和最快的方法是什么。

A) 在 DataManager 类中创建一个public static ArrayList<Object[]> data,并通过DataManager.data在其他类中引用它

B) 在 DataManager 类中创建一个 public ArrayList<Object[]> getData 方法,并让其他类中的方法创建局部变量 ArrayList<Object[]> data = mDataManager.getData() 以供临时使用。

C) ..?

在我看来,由于对象创建,B 的开销更大。另外我读静态比非静态快?

【问题讨论】:

    标签: android performance static


    【解决方案1】:

    选项 B 不会增加内存使用,因为您将只有一个 ArrayList 对象(所有使用它的对象都只持有一个简单的引用,而不是一个副本)。使用ArrayList 的对象也可以将此引用存储为实例变量,而不是每次需要时都从管理器类中请求它。

    我在某处读到访问实例变量比访问类 (static) 变量稍快,但我没有指向源的链接。

    性能上的差异可能没有意义。但是,选项 B 为您提供了更好的封装。

    【讨论】:

    • 也就是说,选项 B 与选项 A 相同,都引用同一个对象。访问静态成员与通过公共方法创建本地成员的性能如何?
    • 对不起,我第一次看错了你的问题。局部变量通常比static 快​​。选项 B 强加了方法调用的轻微开销,但没有任何意义。专注于设计的清晰性,让编译器负责优化代码。
    • C)如何在 DataManager 非静态中创建数据变量并直接从其他类访问它,忽略封装?还是性能增益可以忽略不计,因此使用适当的 OOP 并使用选项 B 会更好?
    • 我会将其设为DataManager 中的非静态成员变量,并让其他类通过getData 方法访问它。从 OO 的角度来看,这是最干净的。您可以使 getter final 编译器可能会内联。
    猜你喜欢
    • 1970-01-01
    • 2011-04-03
    • 1970-01-01
    • 2015-08-02
    • 1970-01-01
    • 2011-06-26
    • 1970-01-01
    • 2011-01-11
    • 2021-06-21
    相关资源
    最近更新 更多