예제 #1
0
    protected ComponentRenderingScenarioBase(string name)
    {
        Name = name;

        var cyclesOption = new CommandOption("--cycles", CommandOptionType.SingleValue);

        Options.Add(cyclesOption);

        OnExecute(() =>
        {
            var numCycles = cyclesOption.HasValue() ? int.Parse(cyclesOption.Value(), CultureInfo.InvariantCulture) : 1;

            var serviceCollection = new ServiceCollection();
            PopulateServiceCollection(serviceCollection);
            var serviceProvider = serviceCollection.BuildServiceProvider();

            var loggerFactory = serviceProvider.GetRequiredService <ILoggerFactory>();
            var renderer      = new ConsoleHostRenderer(serviceProvider, loggerFactory);

            var startTime = DateTime.Now;
            ExecuteAsync(renderer, numCycles).Wait();

            var duration         = DateTime.Now - startTime;
            var durationPerCycle = (duration / numCycles).TotalMilliseconds;
            Console.WriteLine($"{Name}: {durationPerCycle:F1}ms per cycle (cycles tested: {numCycles})");

            return(0);
        });
    }
예제 #2
0
    protected override async Task ExecuteAsync(ConsoleHostRenderer renderer, int numCycles)
    {
        var gridType = _gridTypeOption.HasValue()
            ? (GridRendering.RenderMode)Enum.Parse(typeof(GridRendering.RenderMode), _gridTypeOption.Value(), true)
            : GridRendering.RenderMode.FastGrid;

        for (var i = 0; i < numCycles; i++)
        {
            var hostPage = new GridRendering {
                SelectedRenderMode = gridType
            };
            hostPage.Show();

            var componentId = renderer.AssignRootComponentId(hostPage);
            await renderer.RenderRootComponentAsync(componentId);

            hostPage.ChangePage();
            await renderer.RenderRootComponentAsync(componentId);
        }
    }
예제 #3
0
 protected abstract Task ExecuteAsync(ConsoleHostRenderer renderer, int numCycles);