【问题标题】:Perform a collection of commands as fast as possible in Java [closed]在 Java 中尽可能快地执行命令集合 [关闭]
【发布时间】:2014-09-17 07:20:57
【问题描述】:

在我的项目中,我想将脚本中的大量函数加载到集合中以保存它们并在以后(可能多次)执行它们而无需再次读取脚本。 我需要尽可能快地访问这些功能,并考虑了两种方法:

  1. 命令模式: 我的第一个想法是将脚本命令作为对象(命令模式)存储在集合中,并在我需要执行脚本时在 for-each 循环中执行所有这些命令。 虽然代码会更容易阅读,但我认为通过对象访问所有不同的命令会消耗大量性能和内存。

    for (Command command : commandList) { command.execute();

  2. 字符和 Switch Case 的集合: 我的第二个想法是将 char 或 int 等原始变量存储到集合中,并将 switch-case 构造放入 for-each 循环中。我会使用原语,因为我认为它比字符串对象更快。因此我会使用像 Trove 这样的库。我认为这种方式可能比命令模式更快,因为不必访问命令对象。此外,将占用更少的内存。另一方面,我认为它可能会更慢,因为命令模式可以直接访问正确的功能,而 switch-case 构造必须多次检查 char 是否为 a、b、c、d 等等。

    for (char command : commandList) { switch(command){ case 'a': doA(); break; case 'b': doB(); break; case 'c': ... } }

你认为一种方法更好吗?你知道另一种方法吗?您会推荐哪种类型的收藏?

【问题讨论】:

  • Although the Code will be easier to read I think it will cost a lot of performance and memory to access all the different commands through objects. - 如果您不存储大量命令,则性能影响可以忽略不计。
  • 有什么问题?事实上,这个问题是基于意见的
  • 我不认为它的意见基于。问题是,如果我有包含数百条命令以及各种〜数百种不同命令类型的庞大脚本,那么哪种方式的性能更好。
  • 如果你想要性能问题,那么最好是百万个命令,并且每个命令的执行时间最好不要超过100纳秒。否则,你就没有优化你提出的整个画面的狭窄方面。
  • 嗯,这将是数百万个命令,因为将执行成千上万个 scipts(命令集合)。

标签: java performance collections command-pattern trove4j


【解决方案1】:

您的问题归结为:多态性与 Switch 语句。

前者具有更好的可维护性和可读性,因为当人们想知道发生了什么或添加它时,无需使用幻数作为其键(或在您的情况下为字符)来遍历大型 switch 语句。

就性能而言,两者都应该可以忽略不计并且高度优化,因为它们是非常常见和简单的情况,因此最好担心可读性/可维护性而不是优化,因此多态性更好。

【讨论】:

    【解决方案2】:

    我认为第二种方法更好。

    另一方面,我认为它可能会更慢,因为命令 pattern 可以直接访问正确的功能,而 switch-case 如果 char 是 a,b,c,d 等等,构造必须检查很多次。

    编译器会小心并优化它。如果您的脚本文件大小不是以 GB 为单位,那也没关系。

    【讨论】:

      猜你喜欢
      • 2016-01-23
      • 2015-07-01
      • 2017-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-01
      • 2011-10-23
      • 2018-01-16
      相关资源
      最近更新 更多