【发布时间】:2014-09-17 07:20:57
【问题描述】:
在我的项目中,我想将脚本中的大量函数加载到集合中以保存它们并在以后(可能多次)执行它们而无需再次读取脚本。 我需要尽可能快地访问这些功能,并考虑了两种方法:
-
命令模式: 我的第一个想法是将脚本命令作为对象(命令模式)存储在集合中,并在我需要执行脚本时在 for-each 循环中执行所有这些命令。 虽然代码会更容易阅读,但我认为通过对象访问所有不同的命令会消耗大量性能和内存。
for (Command command : commandList) { command.execute(); -
字符和 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