Wednesday, 31 December 2014

Release Notes - .NET CME MDP 3 Market Data Handler - Version 3.3.0.0

Release details

In version 3.3.0.0 handler is optimized for minimizing latency (50%) and reducing memory consumption and GC load for 30% in comparizon to previous version. Unfortunately this requires significant code breaking changes. Major of them were decribed below.
  • Using messages and repeating groups in user threads.
    There is no more Handler.DisposeFixMessage property. Now messages and groups can be used in events handlers only. If there is need to use corresponding objects outside of event handlers, please use System.ICloneable.Clone() method.
  • No more EventArgs.
    Handler events are no more instances of EventHandler delegate. Each event provides direct access to parameters, which before was 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 allows to iterate throw group entries.

Improvement

  • [NCMMDH-111] - Change log format to same that C++ MDP3 handler use.
  • [NCMMDH-102] - Improve latency by 50%
  • [NCMMDH-99] - Reduce memory consumption and GC load by 30% by removing EventArgs parameters from Handler events
  • [NCMMDH-83] - The default value of the UDP buffer size should be set to 4MiB