From d1e7d8e46644f0fd6815625c57f98d0fde1cf92a Mon Sep 17 00:00:00 2001 From: Todd Grunke Date: Mon, 11 May 2020 10:26:56 -0700 Subject: [PATCH] Improve HtmlTokenizer.AtToken performance. (dotnet/aspnetcore-tooling#1880) Our razor typing test measured 153 CPU ms in this method. Optimized by fewer calls to CurrentCharacter, not checking '<' twice, and uswing a switch stmt.\n\nCommit migrated from https://github.com/dotnet/aspnetcore-tooling/commit/c601c2f11eda36eecbf598d4506fb305f5b3d075 --- .../src/Legacy/HtmlTokenizer.cs | 34 +++++++++++-------- 1 file changed, 20 insertions(+), 14 deletions(-) diff --git a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Legacy/HtmlTokenizer.cs b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Legacy/HtmlTokenizer.cs index 97a270e9e6..aab93bdef8 100644 --- a/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Legacy/HtmlTokenizer.cs +++ b/src/Razor/Microsoft.AspNetCore.Razor.Language/src/Legacy/HtmlTokenizer.cs @@ -253,21 +253,27 @@ namespace Microsoft.AspNetCore.Razor.Language.Legacy return EndToken(SyntaxKind.NewLine); } - private bool AtToken() + private bool AtToken() { - return CurrentCharacter == '<' || - CurrentCharacter == '<' || - CurrentCharacter == '!' || - CurrentCharacter == '/' || - CurrentCharacter == '?' || - CurrentCharacter == '[' || - CurrentCharacter == '>' || - CurrentCharacter == ']' || - CurrentCharacter == '=' || - CurrentCharacter == '"' || - CurrentCharacter == '\'' || - CurrentCharacter == '@' || - (CurrentCharacter == '-' && Peek() == '-'); + switch (CurrentCharacter) + { + case '<': + case '!': + case '/': + case '?': + case '[': + case '>': + case ']': + case '=': + case '"': + case '\'': + case '@': + return true; + case '-': + return Peek() == '-'; + } + + return false; } private StateResult Transition(HtmlTokenizerState state)