public async Task StreamWinderPerformanceTest()
        {
            var source     = new CancellationTokenSource();
            var testStream = new InfiniteStream(TweetSamples.GetBinalyStreamSamples(), source.Token);
            var handler    = new PseudoStreamHandler();
            var received   = 0;

            source.CancelAfter(TimeSpan.FromSeconds(10));
            var receiveTask = StreamWinder.Run(testStream, content =>
            {
                UserStreamParser.ParseStreamLine(content, handler);
                received++;
            }, Timeout.InfiniteTimeSpan, source.Token);

            try
            {
                await receiveTask;
            }
            catch (OperationCanceledException)
            {
                // this is expected.
            }
            System.Diagnostics.Debug.WriteLine(received);
            // i promise myself the cadena engine can handle > 10K events per second.
            Debug.WriteLine("received: {0}", received);
            Debug.WriteLine("handler: statuses: {0} / events: {1}", handler.ReceivedStatuses, handler.ReceivedEvents);
            // Assert.IsTrue(received > 10000 * 10);
        }
 private void ParseLine(string json)
 {
     // reset error count and backoff flag
     _hardErrorCount = 0;
     _backoffMode    = BackoffMode.None;
     _stateUpdater.UpdateState();
     ConnectionState = UserStreamsConnectionState.Connected;
     UserStreamParser.ParseStreamLine(json, _handler);
 }
        public void UserStreamParserPerformanceTest()
        {
            var workingset = Environment.WorkingSet;
            var parser     = new JsonStringParser();

            // pre-work
            for (var i = 0; i < 100; i++)
            {
                foreach (var elem in TweetSamples.GetStreamSampleElements())
                {
                    parser.Parse(elem);
                }
            }

            var source   = new CancellationTokenSource();
            var handler  = new PseudoStreamHandler();
            var received = 0;

            source.CancelAfter(TimeSpan.FromSeconds(10));
            foreach (var content in TweetSamples.GetStreamSamples())
            {
                if (source.IsCancellationRequested)
                {
                    break;
                }
                received++;
                UserStreamParser.ParseStreamLine(parser, content, handler);
            }
            var wsa = Environment.WorkingSet;

            TestContext.WriteLine("received: {0}", received);
            TestContext.WriteLine("handler: statuses: {0} / events: {1}", handler.ReceivedStatuses,
                                  handler.ReceivedEvents);
            TestContext.WriteLine("cache: {0} / {1}", parser.CacheCount(), parser.ALQCount());
            TestContext.WriteLine("workingset delta: {0}", wsa - workingset);
        }