Exemplo n.º 1
0
        public void LinkTrainMultiple(Train orig, TimeEntry offset, TimeEntry diff, int count, ITrainNameGen tnc)
        {
            if (orig.ParentTimetable !.Type == TimetableType.Network && orig.ParentTimetable !.Version.CompareTo(TimetableVersion.Extended_FPL2) < 0)
            {
                throw new TimetableTypeNotSupportedException("train links");
            }

            if (count < 0)
            {
                throw new ArgumentException("Value must be greater than or equal to zero", nameof(count));
            }

            var link = new TrainLink(orig, count)
            {
                TimeDifference    = diff,
                TimeOffset        = offset,
                TrainNamingScheme = tnc,
            };

            orig.AddLink(link);

            for (int i = 0; i < count; i++)
            {
                var linkedTrain = new LinkedTrain(link, i);
                orig.ParentTimetable !.AddTrain(linkedTrain);
            }
        }
        public void LinkedTrainsPerformanceTest()
        {
            var tt       = new Timetable(TimetableType.Linear);
            var stations = new Station[100];

            for (int i = 0; i < 100; i++)
            {
                var sta = new Station(tt);
                sta.SName = "Station " + i;
                sta.Positions.SetPosition(Timetable.LINEAR_ROUTE_ID, i);
                tt.AddStation(sta, Timetable.LINEAR_ROUTE_ID);
                stations[i] = sta;
            }

            var normalTrain = new Train(TrainDirection.ti, tt)
            {
                TName = "P 01"
            };

            tt.AddTrain(normalTrain);
            normalTrain.AddLinearArrDeps();
            for (int i = 0; i < 100; i++)
            {
                var ardp = normalTrain.GetArrDep(stations[i]);
                ardp.Arrival   = new TimeEntry(0, i * 30);
                ardp.Departure = new TimeEntry(0, i * 30 + 10);
            }

            var link = new TrainLink(normalTrain, 10)
            {
                TimeDifference    = new TimeEntry(0, 30),
                TimeOffset        = new TimeEntry(0, 0),
                TrainNamingScheme = new AutoTrainNameGen(normalTrain.TName, 2)
            };

            normalTrain.AddLink(link);
            LinkedTrain linkedTrain = null;

            for (int i = 0; i < link.TrainCount; i++)
            {
                linkedTrain = new LinkedTrain(link, i);
                tt.AddTrain(linkedTrain);
            }

            var sw = new Stopwatch();

            sw.Start();
            for (int i = 0; i < 100; i++)
            {
                var ardps = linkedTrain.GetArrDepsUnsorted();
            }
            sw.Stop();

            Console.WriteLine("Linked read: " + ((float)sw.ElapsedMilliseconds) / 100);

            var sw2 = new Stopwatch();

            sw2.Start();
            for (int i = 0; i < 100; i++)
            {
                var ardps = normalTrain.GetArrDepsUnsorted();
            }
            sw2.Stop();

            Console.WriteLine("Normal read: " + ((float)sw2.ElapsedMilliseconds) / 100);

            var sw3   = new Stopwatch();
            var sta3  = stations[0];
            var ardp3 = normalTrain.GetArrDep(sta3);

            sw3.Start();
            for (int i = 0; i < 100; i++)
            {
                ardp3.Arrival = new TimeEntry(0, i);
            }
            sw3.Stop();

            Console.WriteLine("Write: " + ((float)sw3.ElapsedMilliseconds) / 100);
        }