/*
         * private  bool  _bIsFirstScan = false;
         * private  bool _bIsWorkingMode = false;
         * private DateTime _dtTimeFirstScan = new DateTime(0);
         *
         * private void CheckLim(double val, double maxVal, string msg)
         * {
         *   if (!_bIsFirstScan)
         *   {
         *       _bIsFirstScan = true;
         *       _dtTimeFirstScan = DateTime.Now;
         *   }
         *   else
         *   {
         *
         *   }
         *
         *   if (val>maxVal)
         *   {
         *       string outMsg = "CTradeDispatcher ElapsedMs more than lim "+msg+"val ="+val+"maxVal="+maxVal+" ";
         *       Error(outMsg);
         *   }
         *
         * }
         */

        /// <summary>
        /// Note: packing end sending in parallel thread, not using blocking queue -
        /// triggering from parallel updater
        /// </summary>
        /// <param name="isin"></param>
        public void SendUpdateTradersDeals(string isin)
        {
            List <CRawDeal> lstDeals = _client.DealBox.DealsStruct[isin].ListDeals;
            // List<CDealClass> lstDealsOut = new List<CDealClass>();

            CDealsList lstDealsOut = new CDealsList(isin);

            //lock (lstDeals)
            lock (_client.DealBox.DealsStruct[isin].ListDeals)
            {
                while (lstDeals.Count != 0)
                {
                    lstDealsOut.DealsList.Add(new CDealClass
                    {
                        Amount  = lstDeals[0].Amount,
                        Price   = lstDeals[0].Price,
                        DirDeal = lstDeals[0].GetDealDir(),
                        DtTm    = lstDeals[0].Moment,
                        // Isin = isin ,
                        // Id = lstDeals[0].ReplID
                    });
                    lstDeals.RemoveAt(0);
                }
            }
            if (lstDealsOut.DealsList.Count != 0)
            {
                lstDealsOut.DtBeforePack = DateTime.Now;


                SendDataToClients(lstDealsOut, enmTradingEvent.DealsUpdate, isin);
            }
        }
Example #2
0
        private void ProcessDealsUpdate(byte[] arrMsgBody)
        {
            try
            {
                CDealsList lstDeals = CUtilProto.DeserializeProto <CDealsList>(arrMsgBody);
                string     isin     = lstDeals.Isin; //lstDeals.DealsList[0].Isin;

                CheckDeltaTimeLim(lstDeals.DtBeforePack, 50, "deals update");

                _dtStockUpdate = (DateTime.Now - lstDeals.DtBeforePack).TotalMilliseconds;

                Log("[Dealsupdate]  DtBeforePack=" + lstDeals.DtBeforePack.ToString("hh:mm:ss.fff") + " isin=" + lstDeals.Isin +
                    " Dt_firtst_deal=" + lstDeals.DealsList[0].DtTm.ToString("hh:mm:ss.fff") +
                    " Dt_last_deal=" + lstDeals.DealsList[lstDeals.DealsList.Count - 1].DtTm.ToString("hh:mm:ss.fff") + " Count=" + lstDeals.DealsList.Count +
                    " dt=" + _dtStockUpdate);



                List <CDealClass> lstAggr = new List <CDealClass>();
                //get summarized deals


                _dictDealsAggr[isin].GenAggrPrice(lstDeals.DealsList, lstAggr);


                lock (OutpListAggrDeals[isin])
                {
                    foreach (CDealClass dealClass in lstAggr)//lstDeals.DealsList)
                    {
                        OutpListAggrDeals[isin].Add(dealClass);
                    }
                }

                lock (OutpListRawDeals[isin])
                {
                    foreach (CDealClass dealClass in lstDeals.DealsList)
                    {
                        OutpListRawDeals[isin].Add(dealClass);
                    }
                }
            }



            catch (Exception e)
            {
                Error("CDataReciever deals", e);
            }
        }
Example #3
0
        public TestLogPerf()
        {
            //System.Runtime.GCSettings.LatencyMode = System.Runtime.GCLatencyMode.LowLatency;


            //  CUtil.IncreaseProcessPriority();

            Thread.CurrentThread.Priority = ThreadPriority.Highest;


            InitTicks();
            CDealsList dl = new CDealsList();

            dl.DealsList = new List <CDealClass>();


            CLogServer  lgSrv         = new CLogServer();
            List <long> lstHighTck    = new List <long>();
            List <long> lstHighLogTck = new List <long>();

            LogBuff = new CLoggerBuffered("TestLogPerf", lgSrv);
            (new Thread(ThreadLogProducer)).Start();
            Stopwatch swTotal = new Stopwatch();

            LogBuff.Log("--------------started----------------------------");
            swTotal.Start();

            long beforeTck    = 0;
            long afterTck     = 0;
            long deltaTck     = 0;
            long beforeLogTck = 0;
            long afterLogTck  = 0;
            long deltalogTck  = 0;
            long deltaCycle   = 0;

            for (int i = 0; i < 10000; i++)
            {
                beforeTck = swTotal.ElapsedTicks;
                int fac = 1;
                // for (int j = 1; j < 20; j++)
                //   fac *= j;
                CDealsAgregator da = new CDealsAgregator(100, 1M);
                da.GenAggrPrice(sourceLst, dl.DealsList);


                //CDealsAgregator da = new CDealsAgregator(sourceLst, dl.DealsList, 100,1M);


                afterTck = swTotal.ElapsedTicks;
                deltaTck = afterTck - beforeTck;

                deltalogTck = afterLogTck - beforeLogTck;
                deltaCycle  = beforeTck - afterLogTck;

                beforeLogTck = swTotal.ElapsedTicks;

                long     d1  = 1;
                DateTime dt  = DateTime.Now;
                string   st1 = "sssssss";
                decimal  dc1 = 32132.24343M;

                LogMsg(new CLogStruct
                {
                    I           = i,
                    DeltaTck    = deltaTck,
                    DeltaLogTck = deltalogTck,
                    DeltaCycle  = deltaCycle,
                    D1          = d1,
                    Dt          = dt,
                    St1         = st1,
                    dc1         = dc1,
                    LargeStr    =
                        " 121323232434gdfgdgdsfgdfgsdgdfgsfdgsdgdsfgsdfgsdfgdfgsdfgsdfgfdsgsdg"
                }
                       );
                if (deltaTck > 100 && i > 0)
                {
                    lstHighTck.Add(deltaTck);
                }
                if (deltalogTck > 100)
                {
                    lstHighLogTck.Add(deltalogTck);
                }


                //LogBuff.Log("i= " + i + " deltaTck=" + deltaTck + " deltaLogTck=" + deltalogTck+"  "

                //+ d1+dt+st1+dc1
                // +" 121323232434gdfgdgdsfgdfgsdgdfgsfdgsdgdsfgsdfgsdfgdfgsdfgsdfgfdsgsdg"
                //);
                afterLogTck = swTotal.ElapsedTicks;
            }


            swTotal.Stop();
            Thread.Sleep(2000);
            LogBuff.Log("eclapsed ms=" + swTotal.ElapsedMilliseconds + " ticks=" + swTotal.ElapsedTicks);
            LogBuff.Log("high tick ======");
            foreach (var v in lstHighTck)
            {
                LogBuff.Log(" tick=" + v);
            }

            LogBuff.Log("high tick log======");
            foreach (var v in lstHighLogTck)
            {
                LogBuff.Log(" log tick=" + v);
            }

            LogBuff.Log("--------finished-------------------------------------------");
        }
Example #4
0
    public TestProto()
    {
        Random rnd = new Random();

        //CStockClass sc = new CStockClass("Si-6.15");

        CDealsList sc = new CDealsList("Si-6.15");
        // sc.DealsList.Add(new CDealClass());



        List <CStock> lst = new List <CStock>();

        for (int i = 0; i < 100; i++)
        {
            //sc.StockListBids.Add(new CStock(rnd.Next(80000, 85000), rnd.Next(0, 1000)));
            // sc.StockListAsks.Add(new CStock(rnd.Next(80000, 85000), rnd.Next(0, 1000)));
            //StockList[1].Add(new CStockProto(rnd.Next(80000, 85000), rnd.Next(0, 1000)));


            sc.DealsList.Add(new CDealClass
            {
                Amount = 1,
                DtTm   = DateTime.Now,
                //Id = 12345,
                // Isin = "Si-6.15",
                Price = rnd.Next(80000, 85000)
            });

            lst.Add(new CStock(rnd.Next(80000, 85000), rnd.Next(0, 1000)));
        }

        CStock sp = new CStock(8000, 100);
        //MappedEntity me = new MappedEntity();
        //me.Id = 1;
        //me.Name = "2";


        Stopwatch sw = new System.Diagnostics.Stopwatch();

        Stopwatch sw1 = new System.Diagnostics.Stopwatch();
        Stopwatch sw2 = new System.Diagnostics.Stopwatch();
        Stopwatch sw3 = new System.Diagnostics.Stopwatch();


        sw1.Reset(); sw1.Start();
        sw2.Reset(); sw2.Start();
        sw3.Reset(); sw3.Start();



        // var entity = new CStockProto[] { new CStockProto { Id = 1, Name = "123" }, new MappedEntity { Id = 2, Name = "455" } };

        // Serialize/deserialize using protobuf-net
        byte[] serialized = null;


        const int cnt = 100;


        long [] ticks   = new long[cnt];
        long[]  ticksde = new long[cnt];
        long [] msec    = new long[cnt];
        long[]  msecde  = new long[cnt];

        for (int i = 0; i < cnt; i++)
        //  using (var ms = new MemoryStream())
        {
            sw.Reset(); sw.Start();
            var ms = new MemoryStream();
            Serializer.Serialize(ms, sc);
            serialized = ms.ToArray();

            // serialized = ms.GetBuffer();
            sw.Stop();

            sw1.Reset(); sw1.Start();
            //CStockClass t = Serializer.Deserialize<CStockClass>(new MemoryStream(serialized));

            CDealsList t = Serializer.Deserialize <CDealsList>(new MemoryStream(serialized));


            sw1.Stop();



            msec[i]    = sw.ElapsedMilliseconds;
            ticks[i]   = sw.ElapsedTicks;
            msecde[i]  = sw1.ElapsedMilliseconds;
            ticksde[i] = sw1.ElapsedTicks;
        }
        sw1.Stop();
        long ems = sw1.ElapsedMilliseconds;
        // var t = Serializer.Deserialize<MappedEntity>(new MemoryStream(serialized));
        //var t = Serializer.Deserialize<CStockClassProto>(new MemoryStream(serialized));

        //var t = Serializer.Deserialize<CStockProto>(ms);
    }
Example #5
0
        public TestTicks()
        {
            string  d      = DateTime.Now.ToString("yyy_MM_dd__hh_mm_ss");
            CLogger logger = new CLogger("TestTicks_" + d, false);


            swTot.Reset();
            swTot.Start();
            InitTicks();

            CDealsList dl = new CDealsList();

            dl.DealsList = new List <CDealClass>();
            List <long> lstDi = new List <long>();

            for (int j = 0; j < 3; j++)
            {
                for (int i = 0; i < 900000; i++)
                {
                    lstTotBeginMs.Add(swTot.ElapsedMilliseconds);
                    lstTotBeginTicks.Add(swTot.ElapsedTicks);

                    sw.Reset();
                    sw.Start();
                    CDealsAgregator da = new CDealsAgregator(100, 1M);
                    da.GenAggrPrice(sourceLst, dl.DealsList);
                    //CDealsAgregator da = new CDealsAgregator(sourceLst, dl.DealsList, 100,1M);
                    sw.Stop();
                    lstMS.Add(sw.ElapsedMilliseconds);
                    //lstTicks.Add(sw.ElapsedTicks);

                    lstTotEndMs.Add(swTot.ElapsedMilliseconds);
                    lstTotEndTicks.Add(swTot.ElapsedTicks);
                    if (i > 1)
                    {
                        long di = lstTotBeginMs[i] - lstTotBeginMs[i - 1];
                        if (di > 10)
                        {
                            lstDi.Add(di);
                        }
                    }
                    // System.Threading.Thread.Sleep(1);
                }

                swTot.Stop();
                lstTotBeginMs.Clear();
                lstTotBeginTicks.Clear();
                lstTotEndMs.Clear();
                lstTotEndTicks.Clear();
                lstMS.Clear();
            }
            swFile.Reset();
            swFile.Start();
            for (int i = 0; i < lstTotBeginTicks.Count; i++)
            {
                logger.Log("__________________________________");
                logger.Log("i=" + i);
                logger.Log("iter begin " + lstTotBeginMs[i] + " | " + lstTotBeginTicks[i]);
                logger.Log("iter end " + lstTotEndMs[i] + " | " + lstTotEndTicks[i]);
                logger.Log("__________________________________");
            }
            swFile.Stop();

            for (int i = 0; i < lstDi.Count; i++)
            {
                logger.Log(lstDi[i].ToString());
            }


            logger.Flush();

            System.Threading.Thread.Sleep(1000);
        }