Community
Participate
Working Groups
The performance of ExpressionMatchQuery#perform() can be improved when the iteration is parallelized by using Spliterator. The performance gain can be observed when the iteration occurs over a high number of elements. The examined use case is the CBI Aggregator for simrel.aggr and performing the "Validate Aggregation" action. The perform() method is invoked for a collection of 1077 InstallableUnits in that case. When executing the validation action, ~12s is consumed in ExpressionMatchQuery#perform(). This is called quite frequently and often with larger collections. In the concrete case the method is sometimes called on a collection of 1077 IUs. I tried to use a Spliterator with parallel execution and this shows a performance gain. The time used in the method is ~1s less. More importantly, this time is spent on multiple threads. The calling method is SimplePlanner#getSolutionFor(), whose execution time drops by 6s from 70s to 64.5s. The profile shows half of the time is cut off for some methods: - Unary#evaluate: 8.1s -> 4.1s - Equals#evaluate: 6.1s -> 3.6s - Member$DynamicMember#invoke: 5.9s->2.8s
Created attachment 277858 [details] Profiler Screenshots
New Gerrit change created: https://git.eclipse.org/r/138718