コード例 #1
0
        public static void DoTimed <T>(this IEnumerable <T> e, Action <T> a, string text)
        {
            // PERF: This is a hot path and must run with minimal added overhead.
            // Calling Stopwatch.GetTimestamp is a bit expensive, so we enumerate manually to allow us to call it only
            // once per iteration in the normal case.
            // See also: RunActivity
            var longTickThresholdInStopwatchTicks = PerfTimer.LongTickThresholdInStopwatchTicks;

            using (var enumerator = e.GetEnumerator())
            {
                var start = Stopwatch.GetTimestamp();
                while (enumerator.MoveNext())
                {
                    a(enumerator.Current);
                    var current = Stopwatch.GetTimestamp();
                    if (current - start > longTickThresholdInStopwatchTicks)
                    {
                        PerfTimer.LogLongTick(start, current, text, enumerator.Current);
                        start = Stopwatch.GetTimestamp();
                    }
                    else
                    {
                        start = current;
                    }
                }
            }
        }
コード例 #2
0
ファイル: Util.cs プロジェクト: philipbutkiewicz/OpenRA
        public static Activity RunActivity(Actor self, Activity act)
        {
            // Note - manual iteration here for performance due to high call volume.
            var longTickThresholdInStopwatchTicks = PerfTimer.LongTickThresholdInStopwatchTicks;
            var start = Stopwatch.GetTimestamp();

            while (act != null)
            {
                var prev = act;
                act = act.Tick(self);
                var current = Stopwatch.GetTimestamp();
                if (current - start > longTickThresholdInStopwatchTicks)
                {
                    PerfTimer.LogLongTick(start, current, "Activity", prev);
                    start = Stopwatch.GetTimestamp();
                }
                else
                {
                    start = current;
                }
                if (prev == act)
                {
                    break;
                }
            }
            return(act);
        }
コード例 #3
0
        public static Activity RunActivity(Actor self, Activity act)
        {
            // PERF: If there are no activities we can bail straight away and save ourselves a call to
            // Stopwatch.GetTimestamp.
            if (act == null)
            {
                return(act);
            }

            // PERF: This is a hot path and must run with minimal added overhead.
            // Calling Stopwatch.GetTimestamp is a bit expensive, so we enumerate manually to allow us to call it only
            // once per iteration in the normal case.
            // See also: DoTimed
            var longTickThresholdInStopwatchTicks = PerfTimer.LongTickThresholdInStopwatchTicks;
            var start = Stopwatch.GetTimestamp();

            while (act != null)
            {
                var prev = act;
                act = act.TickOuter(self);
                var current = Stopwatch.GetTimestamp();
                if (current - start > longTickThresholdInStopwatchTicks)
                {
                    PerfTimer.LogLongTick(start, current, "Activity", prev);
                    start = Stopwatch.GetTimestamp();
                }
                else
                {
                    start = current;
                }

                if (act == prev)
                {
                    break;
                }
            }

            return(act);
        }
コード例 #4
0
ファイル: TraitDictionary.cs プロジェクト: boyuezh/OpenRA
            public void ApplyToAllTimed(Action <Actor, T> action, string text)
            {
                var longTickThresholdInStopwatchTicks = PerfTimer.LongTickThresholdInStopwatchTicks;
                var start = Stopwatch.GetTimestamp();

                for (var i = 0; i < actors.Count; i++)
                {
                    var actor = actors[i];
                    var trait = traits[i];
                    action(actor, trait);
                    var current = Stopwatch.GetTimestamp();
                    if (current - start > longTickThresholdInStopwatchTicks)
                    {
                        PerfTimer.LogLongTick(start, current, text, trait);
                        start = Stopwatch.GetTimestamp();
                    }
                    else
                    {
                        start = current;
                    }
                }
            }
コード例 #5
0
        public static void DoTimed <T>(this IEnumerable <T> e, Action <T> a, string text)
        {
            var longTickThresholdInStopwatchTicks = PerfTimer.LongTickThresholdInStopwatchTicks;

            using (var enumerator = e.GetEnumerator())
            {
                var start = Stopwatch.GetTimestamp();
                while (enumerator.MoveNext())
                {
                    a(enumerator.Current);

                    var current = Stopwatch.GetTimestamp();
                    if (current - start > longTickThresholdInStopwatchTicks)
                    {
                        PerfTimer.LogLongTick(start, current, text, enumerator.Current);
                        start = Stopwatch.GetTimestamp();
                    }
                    else
                    {
                        start = current;
                    }
                }
            }
        }