/// <summary> /// Constructor. /// </summary> /// <param name="target">Target.</param> /// <param name="marsh">Marshaller.</param> /// <param name="cacheName">Cache name.</param> /// <param name="keepBinary">Binary flag.</param> public DataStreamerImpl(IUnmanagedTarget target, Marshaller marsh, string cacheName, bool keepBinary) : base(target, marsh) { _cacheName = cacheName; _keepBinary = keepBinary; // Create empty batch. _batch = new DataStreamerBatch <TK, TV>(); // Allocate GC handle so that this data streamer could be easily dereferenced from native code. WeakReference thisRef = new WeakReference(this); _hnd = marsh.Ignite.HandleRegistry.Allocate(thisRef); // Start topology listening. This call will ensure that buffer size member is updated. UU.DataStreamerListenTopology(target, _hnd); // Membar to ensure fields initialization before leaving constructor. Thread.MemoryBarrier(); // Start flusher after everything else is initialized. _flusher = new Flusher <TK, TV>(thisRef); _flusher.RunThread(); }