ASP.NET производительность поколения URL MVC

Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException вообще.

См. также: A хороший список лучших практик

Я бы добавил, очень важно, хорошо использовать модификатор final. Использование "окончательной" модификатор, когда это применимо в Java

Сводка:

  1. Используйте модификатор final для обеспечения хорошей инициализации.
  2. Избегайте возврата null в методы, например, при возврате пустых коллекций.
  3. Использовать аннотации @NotNull и @Nullable
  4. Быстрое завершение работы и использование утверждений, чтобы избежать распространения нулевых объектов через все приложение, когда они не должен быть пустым.
  5. Сначала используйте значения с известным объектом: if("knownObject".equals(unknownObject)
  6. Предпочитают valueOf() поверх toString ().
  7. Используйте null safe StringUtils StringUtils.isEmpty(null).

15
задан tereško 13 July 2012 в 07:10
поделиться

4 ответа

Я задал этот вопрос на форумах MS, которые получили ответ от разработчика MVC MS.

Сообщение

Ответ

От Предварительного просмотра MVC 2 к недавно выпущенной Бете MVC со вчерашнего дня было много изменений в Маршрутизации. Некоторые из тех изменений включают повышения производительности. Вот некоторые приемы для создания поколения URL более производительным в приложении:

  1. Используйте названные маршруты. Названные маршруты являются дополнительной функцией маршрутизации. Имена только относятся к поколению URL - они никогда не используются для соответствия входящим URL. Когда Вы укажете имя при генерации URL, мы только попытаемся соответствовать тому одному маршруту. Это означает, что, даже если именованный маршрут Вы указали, 100-й маршрут в таблице маршрутизации, мы перейдем прямо к нему и попытаемся соответствовать.

  2. Поместите свои наиболее распространенные маршруты в начале таблицы маршрутизации. Это улучшит производительность обоих поколений URL, а также обрабатывающий входящие URL. Маршрутизация работ на основе правила, что первое соответствие побеждает. Если первое соответствие является 100-м маршрутом в Вашей таблице маршрутизации, то это означает, что должно было попробовать 99 других маршрутов и ни одного из них подобранный.

  3. Не используйте поколение URL. Некоторые люди как он, некоторые люди не делают. Это немного хитро ведущему устройству. Хорошо использовать, если Ваши URL являются очень динамичными, но это может быть что-то вроде стычки, когда у Вас есть очень немного URL для начала, и возможно Вы не заботитесь о точно, на что они похожи.

Моя любимая опция является № 1, так как это супер просто в использовании, и это также делает поколение URL более детерминированным из перспективы разработчика приложения (это - Вы!).

4
ответ дан 1 December 2019 в 05:16
поделиться

Кэширование ссылок, вероятно, было бы хорошим предложением для команды, поскольку они не изменятся для жизни процесса (для большинства приложений так или иначе).

, Пока Вы не начинаете определять свои маршруты в настраиваемой форме (такие как web.config или в базе данных) тогда, необходимо было бы сократить немного.

я подозреваю, что большая часть задержки на среднем примере является анонимным типом, который автоматически преобразовывается в словарь. Кэширование URL не помогло бы здесь b/c, необходимо будет все еще отразить тот тип.

Тем временем, можно создать собственные вспомогательные методы для некоторых из тех основанных на словаре ссылок, которые берут точный вход, которого Вы требуете. Тогда можно обработать кэширование себя.

1
ответ дан 1 December 2019 в 05:16
поделиться

Кэширующиеся ссылки, вероятно, были бы хорошим предложением для команды, поскольку они не изменятся для жизни процесса (для большинства приложений так или иначе).

, Как можно кэшировать ссылки, Вы не можете сделать этого насколько я знаю, потому что необходимо кэшировать метод, который выполняется, который происходит после того, как маршрут разрешен, который является медленной частью.

0
ответ дан 1 December 2019 в 05:16
поделиться

Хорошо, две дополнительных метрики на пустом шаблонном проекте:

<%= Bechmark(() => Url.Action("Login", "Account", new Dictionary<string, object> {{"username", "bla"}, {"password", "bla2"}, {"returnurl", "blabla32"}, {"rememberme", "false"}})) %>

<%= Bechmark(() => Url.Action("Login", "Account", new RouteValueDictionary(new Dictionary<string, object> {{"username", "bla"}, {"password", "bla2"}, {"returnurl", "blabla32"}, {"rememberme", "false"}}))) %>

Результаты:

71 мс, 0,071 мс за ссылку

35 мс, 0,035 мс за ссылку

Намного лучшая производительность с путем более противный код. Слишком плохо.

1
ответ дан 1 December 2019 в 05:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: