using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using BenchmarkDotNet.Attributes; using BenchmarkDotNet.Configs; using BenchmarkDotNet.Engines; using BenchmarkDotNet.Running; using Microsoft.VisualStudio.TestPlatform.TestHost; using NUnit.Framework; using QuestPDF.Drawing; using QuestPDF.Drawing.Proxy; using QuestPDF.Elements; using QuestPDF.Infrastructure; using QuestPDF.ReportSample.Layouts; namespace QuestPDF.ReportSample { [SimpleJob(RunStrategy.Monitoring, launchCount: 0, warmupCount: 1, targetCount: 100)] [MinColumn, MaxColumn, MeanColumn, MedianColumn] public class PerformanceTests { private PageContext PageContext { get; set; } private DocumentMetadata Metadata { get; set; } private Container Content { get; set; } [Test] public void Run() { var configuration = ManualConfig .Create(DefaultConfig.Instance) .WithOptions(ConfigOptions.DisableOptimizationsValidator); BenchmarkRunner.Run(configuration); } [IterationSetup] public void GenerateReportData() { var model = DataSource.GetReport(); var report = new StandardReport(model); Metadata = report.GetMetadata(); var documentContainer = new DocumentContainer(); report.Compose(documentContainer); Content = documentContainer.Compose(); PageContext = new PageContext(); DocumentGenerator.RenderPass(PageContext, new FreeCanvas(), Content, Metadata, null); var sw = new Stopwatch(); sw.Start(); Content.HandleVisitor(x => { if (x is ICacheable) x.CreateProxy(y => new CacheProxy(y)); }); sw.Stop(); Console.WriteLine($"Creating cache took: {sw.ElapsedMilliseconds}"); } [Benchmark] public void GenerationTest() { DocumentGenerator.RenderPass(PageContext, new FreeCanvas(), Content, Metadata, null); } } }