Could some/all of these alloc's/initializations be hoisted out of the loop?  e.g. define GreedySolver outside the time-loop?  Also, I think we should allow things like the solver to be specified in the context.  Then the solvers can be swapped without editing the internals of the Timer class.  Do solvers maintain any state between uses by the ExchangeManager? If not, then a single solver can just be reused.  If so, than perhaps a reset method could be added to them so they could be reused.