Esempio n. 1
0
        public unsafe void MeasureTeaFileRawMemoryMappedTick(Runner runner)
        {
            long N = runner.N;
            RawMemoryMapping <Tick> view = null;

            File.Delete(filename);
            using (var tf = TeaFile <Tick> .Create(filename))
            {
                for (int i = 0; i < N; i++)
                {
                    tf.Write(new Tick {
                        Price = i
                    });
                }
            }

            runner.Measure("memmap raw sum using ticks", () =>
            {
                using (view = TeaFile <Tick> .OpenRawMemoryMapping(filename))
                {
                    double sum = 0d;
                    Tick *tick = (Tick *)view.ItemAreaStart;
                    for (int i = 0; i < N; i++)
                    {
                        sum += tick->Price;
                        tick++;
                    }
                    Console.WriteLine(sum);
                    if (sum != runner.TargetValue)
                    {
                        throw new Exception("wrong result");
                    }
                }
            });
        }
Esempio n. 2
0
        public unsafe void AccessItemsViaMemoryMappingPointers()
        {
            const string filename = "AccessItemsViaMemoryMappingPointers.tea";

            using (var f = TeaFile <Tick> .Create(filename))
            {
                var dt = new DateTime(2000, 1, 1);
                for (int i = 0; i < 3; i++)
                {
                    f.Write(new Tick {
                        Time = dt.AddDays(i), Volume = i * 10
                    });
                }
            }
            using (var view = TeaFile <Tick> .OpenRawMemoryMapping(filename))
            {
                Tick *tick = (Tick *)view.ItemAreaStart;
                Tick *end  = (Tick *)view.ItemAreaEnd;
                ((int)tick).Should().Be.LessThanOrEqualTo((int)end);

                int i  = 0;
                var dt = new DateTime(2000, 1, 1);
                while (tick < end)
                {
                    tick->Volume.Should().Be(i * 10);
                    tick->Time.Should().Be(dt.AddDays(i));
                    tick++;
                    i++;
                }
            }
        }
Esempio n. 3
0
        public unsafe void AccessItemsViaMemoryMapping()
        {
            const string filename = "RawMemoryMappingTest_AccessItemsViaMemoryMapping.tea";

            using (var f = TeaFile <Tick> .Create(filename))
            {
                var dt = new DateTime(2000, 1, 1);
                for (int i = 0; i < 27; i++)
                {
                    f.Write(new Tick {
                        Time = dt.AddDays(i), Volume = i * 10
                    });
                }
            }
            using (var view = TeaFile <Tick> .OpenRawMemoryMapping(filename))
            {
                Tick *tick = (Tick *)view.ItemAreaStart;
                var   dt   = new DateTime(2000, 1, 1);
                for (int i = 0; i < 27; i++)
                {
                    tick->Volume.Should().Be(i * 10);
                    tick->Time.Should().Be(dt.AddDays(i));
                    tick++;
                }
            }
        }
Esempio n. 4
0
 static Statistics GetSessionDataMemMapped(string filename)
 {
     using (var mf = RawMemoryMapping <Tick> .OpenRead(filename))
         unsafe
         {
             var    stats     = new Statistics();
             Tick * firstTick = (Tick *)mf.ItemAreaStart;
             double minPrice  = firstTick->Price;
             double maxPrice  = firstTick->Price;
             var    session   = new TradingSession(firstTick->Time);
             stats.Sessions.Add(session);
             for (var t = firstTick; t != mf.ItemAreaEnd; t++)
             {
                 if (t->Time >= session.End)
                 {
                     session = new TradingSession(t->Time);
                     stats.Sessions.Add(session);
                 }
                 session.TickCount++;
                 minPrice = Math.Min(t->Price, minPrice);
                 maxPrice = Math.Max(t->Price, maxPrice);
             }
             stats.MinPrice = minPrice;
             stats.MaxPrice = maxPrice;
             return(stats);
         }
 }
Esempio n. 5
0
        static unsafe double RunMemoryMapped(string filename)
        {
            double sum = 0;

            using (var fm = TeaFile <Tick> .OpenRawMemoryMapping(filename))
            {
                for (Tick *tick = (Tick *)fm.ItemAreaStart; tick != fm.ItemAreaEnd; ++tick)
                {
                    sum += tick->Price;
                }
            }
            return(sum);
        }
Esempio n. 6
0
 public TickPointer(Tick *ptr)
 {
     Ptr = ptr;
 }