Пример #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");
                    }
                }
            });
        }
Пример #2
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);
         }
 }
Пример #3
0
        public unsafe void MeasureTeaFileRawMemoryMapped(Runner runner)
        {
            long N = runner.N;
            RawMemoryMapping <double> view = null;

            //string copyfilename = "copy" + filename;
            //if (File.Exists(copyfilename)) File.Delete(copyfilename);
            //File.Copy(filename, copyfilename);
            //if(File.Exists(filename)) File.Delete(filename);
            runner.Measure("TeaFile<double>.OpenRawMemoryMapping", () =>
            {
                view = TeaFile <double> .OpenRawMemoryMapping(filename);
            });
            runner.Measure("memmap raw sum += view[i]", () =>
            {
                double sum = 0d;
                double *p  = (double *)view.ItemAreaStart;
                for (int i = 0; i < N; i++)
                {
                    sum += *p;
                    p++;
                }
                Console.WriteLine(sum);
                if (sum != runner.TargetValue)
                {
                    throw new Exception("wrong result");
                }
            });
            runner.Measure("memmap raw sum += view[i] 2nd run", () =>
            {
                double sum = 0d;
                double *p  = (double *)view.ItemAreaStart;
                for (int i = 0; i < N; i++)
                {
                    sum += *p;
                    p++;
                }
                Console.WriteLine(sum);
                if (sum != runner.TargetValue)
                {
                    throw new Exception("wrong result");
                }
            });
            runner.Measure("memmap raw sum += view[i] 3rd run", () =>
            {
                double sum = 0d;
                double *p  = (double *)view.ItemAreaStart;
                for (int i = 0; i < N; i++)
                {
                    sum += *p;
                    p++;
                }
                Console.WriteLine(sum);
                if (sum != runner.TargetValue)
                {
                    throw new Exception("wrong result");
                }
            });
            runner.Measure("memmap raw sum += view[i] 4th run, pointer only", () =>
            {
                double sum  = 0d;
                double *p   = (double *)view.ItemAreaStart;
                double *end = (double *)view.ItemAreaEnd;
                while (p < end)
                {
                    sum += *p;
                    p++;
                }
                Console.WriteLine(sum);
                if (sum != runner.TargetValue)
                {
                    throw new Exception("wrong result");
                }
            });
            view.Dispose();
            view = null;
        }