/* * 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); } }
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); } }
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-------------------------------------------"); }
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); }
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); }