2013-02-09 1 views
9

Я пытаюсь оптимизировать функцию кодирования JavaScript (на C#) для повышения ее производительности (в общей попытке повысить производительность корпоративного веб-приложения) , Мы попытались использовать .NET HttpUtility.JavaScriptStringEncode, но он не кодирует способ, которым ожидает наш слой данных (и изменение уровня данных отсутствует в таблице).Разница в производительности между .NET методом (в .dll) и отраженной версией

Используя инструмент профилирования RedGate, я определил, что наилучшая производительность нашей функции составляет около 8% от общей загрузки страницы. Когда я использую функцию .NET (на странице, которая ее принимает), она составляет около 0,08% от общей загрузки страницы. Мы отразили функцию .NET, чтобы увидеть, какое колдовство они работают, и когда я скопировал отраженный код в функцию и запускал ее напрямую, она выполнялась примерно на 10%.

Мне любопытно, почему. Каким образом .NET-функция по-разному поощряла такое увеличение производительности?

Извиняюсь заранее, но я не могу вставить функцию, которую мы используем, но я не думаю, что это должно повлиять на ответ.

+1

Интересно. Просто убедитесь, что вы использовали эти тесты в режиме Release на том же ПК и странице, верно? О, и вы несколько раз запускали тест в одном и том же запуске, чтобы убедиться, что JIT сформировал весь код, прежде чем вы его оценили? – Cameron

+1

Было ли изменено фактическое время выполнения или только часть общей загрузки страницы? Возможно, страница более сложная, а общая сумма медленнее. –

+0

Я бы попытался использовать сериализатор ServiceStack (доступный через NuGet); это быстро, но все же достаточно гибко. Что касается измерений производительности, попробуйте изолировать код в единичном тесте или аналогичном, чтобы вы могли делать повторные итерации и легко сравнивать различные подходы. Код бенчмаркинга, который работает через IIS, обычно не идеален, так как многие другие факторы могут исказить результаты. Обратите внимание, что отправка dll с .NET обычно предварительно скомпилирована и поэтому не должна быть JIT'ed во время выполнения. –

ответ

1

Можно ли сравнить код IL, созданный после того, как вы вставляете отраженный код в свою библиотеку с кодом IL, присутствующим в библиотеке .NET? Переключатель компилятора, используемый для компиляции, может вызвать такие различия.