Почему кэшируемый Regexp превосходит по характеристикам скомпилированный?

Как говорит твоя ошибка. Angular поддерживает только перебор массивов.

Я думаю, что вам не хватает | async для преобразования вашей наблюдаемой обратно в массив.

<app-editform [toDo$]="todo" *ngFor="let todo of cs.$todos | async"></app-editform>

9
задан Jeff Atwood 24 December 2009 в 22:41
поделиться

3 ответа

В Regex. Версия соответствия Вы ищете вход в шаблоне. Попытайтесь подкачать параметры вокруг.

var m3 = Regex.Match(pattern, item); // Wrong
var m3 = Regex.Match(item, pattern); // Correct
4
ответ дан 4 December 2019 в 23:08
поделиться

Я заметил подобное поведение. Я также задался вопросом, почему скомпилированная версия будет медленнее, но заметила, что выше определенного числа вызовов, скомпилированная версия быстрее. Таким образом, я вырыл в Отражатель немного, и я заметил, что для скомпилированного Regex, существует все еще немного установки, которая выполняется на первом вызове (а именно, создавая экземпляр соответствующего RegexRunner объект).

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


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

Когда Вы используете методы экземпляра для сингла Regex объект, затем это не проблема. Парсинг все еще только выполняется одно время (при создании объекта). Кроме того, Вы добираетесь, чтобы не выполнять все другие код в конструкторе, а также выделение "кучи" (и последующая сборка "мусора").

Martin Brown заметил, что Вы инвертировали аргументы своим помехам Regex звоните (хорошая выгода, Martin). Я думаю, что Вы найдете, что при фиксации этого экземпляр (не - скомпилированный) regex разобьет статические вызовы каждый раз. Необходимо также найти, что, учитывая мои результаты выше, скомпилированный экземпляр будет биться не - скомпилировал один, также.

НО: необходимо действительно прочитать сообщение Jeff Atwood на скомпилированном regexes перед движением, вслепую применяя ту опцию к каждому regex, который Вы создаете.

3
ответ дан 4 December 2019 в 23:08
поделиться

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

0
ответ дан 4 December 2019 в 23:08
поделиться
Другие вопросы по тегам:

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