Влияет ли Member Renamer на производительность? - PullRequest
0 голосов
/ 20 сентября 2018

Оказывает ли использование Member Renamer какое-либо влияние на производительность, потому что оно будет делать это через Reflection: https://github.com/lunet-io/scriban/blob/master/doc/runtime.md#member-renamer

1 Ответ

0 голосов
/ 24 декабря 2018

Scriban с или без Renamer использует отражение для получения общедоступных свойств и методов.

Renamer - небольшой шаг в его обработке.

Посмотрите на Renamer в Исходный код .

Я сделал тест, используя смарт- BenchmarkDotNet

для следующего шаблона

    <ul id='products'>
      {% for product in products %}
        <li>
         product.name: <h2>{{ product.name }}</h2>
          product.price:   Only {{ product.price }}
           product.description:    {{ product.description | truncate: 15 }}
        </li>
      {% endfor %}
    </ul>

Размер данных:List<Product> Products равно 500

Результат теста:

                        Method |     Mean |     Error |    StdDev | Ratio |
    -------------------------- |---------:|----------:|----------:|------:|
        'Scriban with Renamer' | 3.125 ms | 0.0617 ms | 0.0711 ms |  1.00 |
                               |          |           |           |       |
     'Scriban without Renamer' | 3.070 ms | 0.0388 ms | 0.0363 ms |  1.00 |

    // * Hints *
    Outliers
      TemplateManager.'Scriban with Renamer': Clr -> 1 outlier  was  removed

    // * Legends *
      Mean   : Arithmetic mean of all measurements
      Error  : Half of 99.9% confidence interval
      StdDev : Standard deviation of all measurements
      Ratio  : Mean of the ratio distribution ([Current]/[Baseline])
      1 ms   : 1 Millisecond (0.001 sec)

Как вы видите, разница (в случае Renamer) составляет примерно: 0,055 мс
Разницы приблизительно нет

Вывод: Не действует в случае Renamer

Примечание: Цифры в этом тесте могут отличаться на других машинах в зависимости от процессора / памяти /... и т. д., но вывод тот же.

...