private void ScheduleTick(TimeSpan tickTime) { // keep TickFrequency interval between ticks tickTime = tickTime.Max(lastTickTime + TickFrequency); if (scheduledTick != null) { if (scheduledTickTime <= tickTime) { // earlier tick is already scheduled return; } scheduledTick.Dispose(); } scheduledTick = ApplicationHost.Current.TaskScheduler.ScheduleTask((tickTime - Time).Max(TimeSpan.Zero), () => Dispatcher.CurrentDispatcher.BeginInvoke(DispatcherPriority.Render, () => Tick())); scheduledTickTime = tickTime; }
public void Benchmark2() { var sw = new Stopwatch(); var times = new TimeSpan[10]; for (var i = 0; i < 10; i++) { sw.Start(); var allFriends = this.db.Views.QueryAsync<Person>(new QueryViewRequest("person", "all_friends")).Result; var randomPerson = allFriends.Rows.RandomEntry(this.rng).Value; var friendsFromRandom = this.RelationsFrom(randomPerson, "Friend").ToList(); var friendsFromFriendsFromRandom = friendsFromRandom.SelectMany(x => this.RelationsFrom(x, "Friend")).ToList(); Console.WriteLine("Count results : " + friendsFromFriendsFromRandom.Count); times[i] = sw.Elapsed; sw.Stop(); sw.Reset(); } Console.WriteLine("====================================================================="); Console.WriteLine("Min time : " + times.Min()); Console.WriteLine("Max time : " + times.Max()); Console.WriteLine("Average time : " + TimeSpan.FromTicks((long)times.Average(x => x.Ticks))); Console.WriteLine("Median time : " + times.OrderBy(x => x).ElementAt(times.Length / 2)); Console.WriteLine("====================================================================="); }