有什么理由或我做错了什么,为什么RazorEngine只是解析100个不同的模板这么慢?我正在研究StringTemplate,并进行了两次测试以进行比较,如下所示。
[Test]
public void TestStringTemplate()
{
CsStopwatch stopwatch = new CsStopwatch();
stopwatch.Start();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 100; i++)
{
string template = @"Hello there my name is <Name> <Surname> " + i;
TextParseTests.TestModel model = new TextParseTests.TestModel();
model.Name = "Karl";
model.Surname = "Cassar";
Template t = new Template(template);
t.Add("Name", model.Name);
t.Add("Surname", model.Surname);
var result = t.Render();
sb.AppendLine(result);
}
stopwatch.Stop();
var ms = stopwatch.ElapsedMilliseconds;
int k = 5;
//109ms
}
[Test]
public void TestRazorEngine()
{
CsStopwatch stopwatch = new CsStopwatch();
stopwatch.Start();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 100; i++)
{
string template = @"Hello there my name is @Model.Name @Model.Surname " + i;
TextParseTests.TestModel model = new TextParseTests.TestModel();
model.Name = "Karl";
model.Surname = "Cassar";
var result = Razor.Parse(template, model);
sb.AppendLine(result);
}
stopwatch.Stop();
var ms = stopwatch.ElapsedMilliseconds;
int k = 5;
//24000~ ms
}
差异是惊人的。
比StringTemplate慢200多倍!我有很多使用RazorEngine格式的内容,我更喜欢RazorEngine方法而不是StringTemplate。但是,这非常非常慢。
任何想法,如果我可能做错了什么?请注意,我正在使用不同的模板,好像我使用RazorEngine的缓存它更快(低至300 - 400毫秒)但我的网站有很多不同的小文本,并且这是最真实的生活。测试我能做到。
答案 0 :(得分:4)
Razor.Parse每次都会编译模板。
你不应该这样做。您的应用程序应该编译模板一次,或者在应用程序运行时修改模板时更改模板。
Razor.Compile(模板,名称);
在此之后,您的应用程序应使用
Razor.Run(名称,型号);
比较时间与Razor.Run而不是Razor.Parse