In version 18.104.22.168 the handler is optimized for minimizing latency (50%), and reducing memory consumption and GC load by 30%. Unfortunately these changes required code breaking API changes that do impact prior integration code. These are decribed below.
Using messages and repeating groups in user threads.
There is no longer a Handler.DisposeFixMessage property. Now messages and groups can be used in events handlers only. If there is a requirement to use the corresponding objects outside of event handlers, please use System.ICloneable.Clone() method.
No more EventArgs.
Handler events are no longer instances of EventHandler delegate. Each event now provides direct access to its parameters, which were previously contained in EventArgs instance.
Old event handler:
public void OnRegularOrderBookUpdated(object sender, OrderBookUpdatedEventArgs args)
New event handler:
public void OnRegularOrderBookUpdated(Handler handler, IOrderBook book, long receivingTimestamp, long processingStartedTimestamp, DateTime sendingTime, uint messageSequenceNumber, DateTime tradeDate)
Interfaces instead of classes.
Instead of classes like Message or Group, event handlers provides arguments of inteface types OnixS.SimpleBinaryEncoding.IMessage, OnixS.SimpleBinaryEncoding.IGroup and OnixS.SimpleBinaryEncoding.IFieldSet.
Repeating groups is iterators instead of lists.
Each repeating group implements OnixS.SimpleBinaryEncoding.IGroup interface, which has OnixS.SimpleBinaryEncoding.IGroup.MoveNext() and OnixS.SimpleBinaryEncoding.IGroup.Reset() methods, which enabled iteration through group entries.