void ReceiveBody() { try { _connector.OnNext(true); var buf = new byte[9]; while (!_disconnected) { if (!Receive(buf, 0, 1)) { return; } var packLen = PackUnpack.LengthVUInt(buf, 0); if (packLen > 1) { if (!Receive(buf, 1, packLen - 1)) { return; } } int o = 0; var len = PackUnpack.UnpackVUInt(buf, ref o); if (len > int.MaxValue) { throw new InvalidDataException(); } var result = new byte[len]; if (len != 0) { if (!Receive(result, 0, (int)len)) { return; } } _receiver.OnNext(ByteBuffer.NewAsync(result)); } } catch (Exception) { SignalDisconnected(); } SignalDisconnected(); }
public static void RunFastSubject() { //Observers My Fast Original Delegate Del+null // 0 472 2877 315 43 // 1 588 3087 1537 314 // 2 1198 3298 1853 1573 // 3 1926 3509 2134 1850 // 4 2208 3718 2972 2182 Console.WriteLine("FastSubject"); Console.WriteLine("Observers My Fast Original Delegate Del+null"); for (var observers = -1; observers < 5; observers++) { Console.Write("{0,9} ", observers); Stopwatch sw; { var subj = new FastSubject <int>(); for (var i = 0; i < observers; i++) { subj.Subscribe(new EmptyIntObserver()); } subj.OnNext(0); sw = Stopwatch.StartNew(); for (var i = 0; i < 100000000; i++) { subj.OnNext(i); } Console.Write("{0,8} ", sw.ElapsedMilliseconds); } { var subj = new Subject <int>(); for (var i = 0; i < observers; i++) { subj.Subscribe(new EmptyIntObserver()); } subj.OnNext(0); sw = Stopwatch.StartNew(); for (var i = 0; i < 100000000; i++) { subj.OnNext(i); } Console.Write("{0,8} ", sw.ElapsedMilliseconds); } { Action <int> d = p => { }; for (var i = 0; i < observers; i++) { d += p => { }; } d(0); sw = Stopwatch.StartNew(); for (var i = 0; i < 100000000; i++) { d(i); } Console.Write("{0,8} ", sw.ElapsedMilliseconds); } { Action <int>?d = null; for (var i = 0; i < observers; i++) { d += p => { }; } { var localD = d; localD?.Invoke(0); } sw = Stopwatch.StartNew(); for (var i = 0; i < 100000000; i++) { var localD = d; localD?.Invoke(i); } Console.Write("{0,8} ", sw.ElapsedMilliseconds); } Console.WriteLine(); } }