【问题标题】:Are there performance differences between GetComponent() or accessing a Dictionary? [closed]GetComponent() 或访问字典之间是否存在性能差异? [关闭]
【发布时间】:2013-11-18 06:35:31
【问题描述】:

我想在触发器输入时访问游戏对象的组件。我可以使用GetComponent<CustomClass>(),或者我可以在Awake() 创建游戏对象与字典中的CustomClass 的连接,因此我可以按如下方式访问CustomClass:Dictionary[gameobject]

两者之间有性能差异吗?

【问题讨论】:

  • 这听起来像是premature optimization 的情况。为什么你在乎什么更快?你现在应该只关心什么适合你的需要。一旦发现瓶颈,就该联系profile,最后再联系optimize
  • @user2674389 你应该really 使用code block 代码,而不是emphasis 的非代码相关项目。如果你想强调一个词使用斜体
  • @Servy 谢谢,我尽量记住这一点。 :-)
  • 我同意这是过早的优化,但为什么这个问题被关闭了?关于“什么是更快”的问题绝对不是“基于意见”的问题,您可以进行实验并确定结果。
  • @golergka 该标志可能不正确,但问题仍应关闭/保留。 OP 在测试性能方面和我们其他人一样有能力。如果不是,那完全是一个不同的问题。

标签: c# performance dictionary unity3d


【解决方案1】:

对 OnTriggerEnter 使用 .GetComponent() 应该没有任何问题 :: OnTriggerEnter 的物理计算很可能是资源密集型的 10 倍以上

我建议保存 Dictionary[Component] 之类的优化以用于更多重复性任务,例如更新场景中的每个 AI 脚本或增加每个刚体的质量。

【讨论】:

    【解决方案2】:

    Dictionary 提供恒定时间(用简单的英语:快速)查找。假设设置和保持更新不是太多工作,它应该比GetComponent 更快,这是一种更动态的查找。

    不过,我想知道这是不是premature optimization

    【讨论】:

      猜你喜欢
      • 2010-09-18
      • 2012-09-12
      • 1970-01-01
      • 1970-01-01
      • 2019-06-15
      • 2012-03-05
      • 1970-01-01
      • 2014-05-17
      相关资源
      最近更新 更多