59 lines
2.1 KiB
C#
59 lines
2.1 KiB
C#
// Copyright (c) .NET Foundation. All rights reserved.
|
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
|
|
|
using System;
|
|
using System.IO;
|
|
using BenchmarkDotNet.Attributes;
|
|
using Microsoft.AspNetCore.Mvc.Razor.Extensions;
|
|
using Microsoft.AspNetCore.Razor.Language;
|
|
|
|
namespace Microsoft.AspNetCore.Razor.Performance
|
|
{
|
|
public class CodeGenerationBenchmark
|
|
{
|
|
public CodeGenerationBenchmark()
|
|
{
|
|
var current = new DirectoryInfo(AppContext.BaseDirectory);
|
|
while (current != null && !File.Exists(Path.Combine(current.FullName, "MSN.cshtml")))
|
|
{
|
|
current = current.Parent;
|
|
}
|
|
|
|
var root = current;
|
|
var fileSystem = RazorProjectFileSystem.Create(root.FullName);
|
|
|
|
ProjectEngine = RazorProjectEngine.Create(RazorConfiguration.Default, fileSystem, b => RazorExtensions.Register(b)); ;
|
|
|
|
MSN = fileSystem.GetItem(Path.Combine(root.FullName, "MSN.cshtml"));
|
|
}
|
|
|
|
public RazorProjectEngine ProjectEngine { get; }
|
|
|
|
public RazorProjectItem MSN { get; }
|
|
|
|
[Benchmark(Description = "Razor Design Time Code Generation of MSN.com")]
|
|
public void CodeGeneration_DesignTime_LargeStaticFile()
|
|
{
|
|
var codeDocument = ProjectEngine.ProcessDesignTime(MSN);
|
|
var generated = codeDocument.GetCSharpDocument();
|
|
|
|
if (generated.Diagnostics.Count != 0)
|
|
{
|
|
throw new Exception("Error!" + Environment.NewLine + string.Join(Environment.NewLine, generated.Diagnostics));
|
|
}
|
|
}
|
|
|
|
[Benchmark(Description = "Razor Runtime Code Generation of MSN.com")]
|
|
public void CodeGeneration_Runtime_LargeStaticFile()
|
|
{
|
|
var codeDocument = ProjectEngine.Process(MSN);
|
|
var generated = codeDocument.GetCSharpDocument();
|
|
|
|
if (generated.Diagnostics.Count != 0)
|
|
{
|
|
throw new Exception("Error!" + Environment.NewLine + string.Join(Environment.NewLine, generated.Diagnostics));
|
|
}
|
|
}
|
|
}
|
|
}
|