From 94015a19795e07d955ed9e061a0ce71decee460b Mon Sep 17 00:00:00 2001 From: Nils Christian Ehmke <nie@informatik.uni-kiel.de> Date: Thu, 11 Dec 2014 15:20:15 +0100 Subject: [PATCH] Modifications for performance reasons --- .../teetime/stage/MultipleInstanceOfFilter.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/main/java/teetime/stage/MultipleInstanceOfFilter.java b/src/main/java/teetime/stage/MultipleInstanceOfFilter.java index f2d34990..23aea142 100644 --- a/src/main/java/teetime/stage/MultipleInstanceOfFilter.java +++ b/src/main/java/teetime/stage/MultipleInstanceOfFilter.java @@ -13,6 +13,7 @@ import teetime.framework.OutputPort; public final class MultipleInstanceOfFilter<I> extends AbstractConsumerStage<I> { private final Map<Class<? extends I>, OutputPort<? super I>> outputPortsMap = new HashMap<Class<? extends I>, OutputPort<? super I>>(); + private Entry<Class<? extends I>, OutputPort<? super I>>[] cachedOutputPortsMap; @SuppressWarnings("unchecked") public <T extends I> OutputPort<T> getOutputPortForType(final Class<T> clazz) { @@ -22,13 +23,21 @@ public final class MultipleInstanceOfFilter<I> extends AbstractConsumerStage<I> return (OutputPort<T>) this.outputPortsMap.get(clazz); } + @Override + @SuppressWarnings("unchecked") + public void onStarting() throws Exception { + super.onStarting(); + + // We cache the map to avoid the creating of iterators during runtime + cachedOutputPortsMap = (Entry<Class<? extends I>, OutputPort<? super I>>[]) outputPortsMap.entrySet().toArray(new Entry<?, ?>[outputPortsMap.size()]); + } + @Override protected void execute(final I element) { - for (Entry<Class<? extends I>, OutputPort<? super I>> outputPortMapEntry : outputPortsMap.entrySet()) { + for (Entry<Class<? extends I>, OutputPort<? super I>> outputPortMapEntry : cachedOutputPortsMap) { if (outputPortMapEntry.getKey().isInstance(element)) { outputPortMapEntry.getValue().send(element); } } } - } -- GitLab