2

RazorEngine が 100 の異なるテンプレートを解析するだけで非常に遅いのはなぜですか? 私は StringTemplate を調べていて、以下のように比較するために 2 つのテストを実行しました。

    [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
    }

違いは驚異的です。

  • 文字列テンプレートv4 : 109ms
  • RazorEngine 3.3 : 24,131ms

これは、StringTemplate よりも 200 倍以上遅いです。RazorEngine 形式を使用するコンテンツがたくさんありますが、StringTemplate よりも RazorEngine の構文の方が好きです。ただし、これは非常に非常に遅いです。

私が何か間違ったことをしている可能性がある場合、何かアイデアはありますか? RazorEngine のキャッシングを使用する場合ははるかに高速 (300 ~ 400 ミリ秒まで) になるため、意図的に異なるテンプレートを使用していることに注意してください。私ができる人生のテスト。

4

1 に答える 1