【问题标题】:Classes, Static Methods, or Instance Methods - Memory Consumption and Executable Size in Compiled Languages?类、静态方法或实例方法 - 编译语言中的内存消耗和可执行文件大小?
【发布时间】:2011-01-18 04:10:34
【问题描述】:

我一直想知道如何尝试提高我的 Flex swf 的性能和大小,类、静态方法和实例方法如何影响性能和最终编译的“可执行文件”大小?思考如何将 HAMLSass 之类的东西应用到 Flex...

假设我正在构建一个包含大量组件和视图的非常大的管理界面,并且每个组件都应用了一个 Skin 对象(想想Spark Skinning Architecture for Flex)。

现在我想为每个皮肤添加 10 种不同的效果(假设屏幕上有 100 个组件,所以这是 1000 个实例化效果)。是否更好:

  1. 让每个效果都成为一个类(BlurEffect、GlowEffect...),并将这 10 个添加到皮肤中。
  2. 让所有效果都实例方法在一个更大的类中,比如“MultiEffect.as”,然后将该类添加到皮肤中,引用如multiEffect.glow()
  3. 将所有效果都静态方法放在一个单例“EffectManager.as”类中,并通过EffectManager.glow(this) 引用皮肤中的效果。

所以

  • 每个皮肤有多个效果类,对比
  • 每个皮肤一个效果类,带有实例方法,与
  • 一个全局效果类,带有静态方法

这些因素如何影响内存可执行文件大小(本例中为 swf 大小)?我知道类是更好的 OO 实践,并且静态方法比实例方法慢,并且要避免使用单例,因此这不一定与 性能 有关。更多关于内存(在某些情况下如果更小会更好)和文件大小。

【问题讨论】:

  • 如果这是一个管理界面,为什么它需要所有这些华丽的模糊效果和发光效果之类的,它们真的只会让整个东西渲染得非常慢?
  • 静态方法并不比实例方法慢,反而更快。
  • 我认为这属于过早优化的范畴。在考虑遵循哪种设计范式时,运行时速度和内存不应成为问题。正确执行的过程和 OO 方法在速度和内存占用方面非常相似。
  • 问题中使用的道具简化了对基本问题的描述:这 3 种不同实现的幕后发生了什么。还没有找到合适的答案。

标签: java c++ apache-flex memory-management performance


【解决方案1】:

无法为 Flex 找到此类信息,但对于 Java(应该不会相差太大),对象创建开销只有 8 个字节的内存。

这意味着如果我们谈论 1000 个实例,则为每个实例使用对象的开销最多为 8K - 可以忽略不计。如果再增加 100 倍,它仍然是 800K,这仍然不算什么。

因此,呼应之前的答案,选择可以为您提供更好设计的选项。

哦,结果文件大小的差异几乎没有。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-07
    • 1970-01-01
    • 2015-11-14
    • 2018-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多