[PR #864] [MERGED] A couple perf improvements #1258

Open
opened 2026-01-29 14:52:14 +00:00 by claunia · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/xoofx/markdig/pull/864
Author: @MihaZupan
Created: 4/14/2025
Status: Merged
Merged: 4/14/2025
Merged by: @xoofx

Base: masterHead: net9-perf4


📝 Commits (10+)

  • dab1ca5 Avoid unnecessary null check when reading trivia info
  • adfcf42 Use FrozenDictionary in a couple places
  • d8f6921 Commit FrozenDictionary polyfill
  • ecfda37 Avoid warnings in Markdig.WebApp
  • a82c3bd Improve some character tests
  • 8cfa0cf Improve more character tests with SearchValues
  • 7a9c192 Speed up FencedCodeBlock rendering
  • eceb70c Avoid delegate allocations in AutoIdentifierExtension
  • da3d7f4 Improve some descriptions
  • c82a368 Use the field keyword in a few places

📊 Changes

34 files changed (+541 additions, -320 deletions)

View changed files

📝 src/Markdig.Tests/TestCharHelper.cs (+141 -11)
📝 src/Markdig.WebApp/ApiController.cs (+1 -1)
📝 src/Markdig.WebApp/Startup.cs (+1 -1)
📝 src/Markdig/Extensions/Abbreviations/AbbreviationParser.cs (+4 -7)
📝 src/Markdig/Extensions/Alerts/AlertBlockRenderer.cs (+0 -1)
📝 src/Markdig/Extensions/Alerts/AlertInlineParser.cs (+0 -1)
📝 src/Markdig/Extensions/AutoIdentifiers/AutoIdentifierExtension.cs (+8 -4)
📝 src/Markdig/Extensions/AutoLinks/AutoLinkParser.cs (+120 -141)
📝 src/Markdig/Extensions/GenericAttributes/GenericAttributesParser.cs (+1 -1)
📝 src/Markdig/Extensions/Globalization/GlobalizationExtension.cs (+1 -1)
📝 src/Markdig/Extensions/MediaLinks/HostProviderBuilder.cs (+9 -10)
📝 src/Markdig/Extensions/MediaLinks/MediaOptions.cs (+1 -1)
📝 src/Markdig/Extensions/Yaml/YamlFrontMatterParser.cs (+2 -2)
📝 src/Markdig/Globals.cs (+1 -0)
📝 src/Markdig/Helpers/CharHelper.cs (+101 -79)
📝 src/Markdig/Helpers/CharNormalizer.cs (+2 -2)
📝 src/Markdig/Helpers/CharacterMap.cs (+10 -5)
📝 src/Markdig/Helpers/LinkHelper.cs (+11 -11)
📝 src/Markdig/Helpers/StringSlice.cs (+2 -2)
📝 src/Markdig/Markdig.targets (+3 -3)

...and 14 more files

📄 Description

Improves parsing perf a bit (around 2-4 %).

Logically separated in commits:

  • Removing branches from various character checks (removing redundant conditions in calling code, updating helpers)
  • A bit faster AutoLink and FencedCodeBlock matching
  • Removed per-parsing allocation of delegate captures in AutoIdentifiers
  • Using frozen collections in a few minor places

🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/xoofx/markdig/pull/864 **Author:** [@MihaZupan](https://github.com/MihaZupan) **Created:** 4/14/2025 **Status:** ✅ Merged **Merged:** 4/14/2025 **Merged by:** [@xoofx](https://github.com/xoofx) **Base:** `master` ← **Head:** `net9-perf4` --- ### 📝 Commits (10+) - [`dab1ca5`](https://github.com/xoofx/markdig/commit/dab1ca54837338f6d168f130c534d24c5b902500) Avoid unnecessary null check when reading trivia info - [`adfcf42`](https://github.com/xoofx/markdig/commit/adfcf42529649e1e4bf5e95e152411577e9f7eec) Use FrozenDictionary in a couple places - [`d8f6921`](https://github.com/xoofx/markdig/commit/d8f69218db17ee86399f21915ab72d87138c4dc8) Commit FrozenDictionary polyfill - [`ecfda37`](https://github.com/xoofx/markdig/commit/ecfda373b9f9185f74bcf6e901a9d6901a841761) Avoid warnings in Markdig.WebApp - [`a82c3bd`](https://github.com/xoofx/markdig/commit/a82c3bd705e03d67c168a5a773247130f3954115) Improve some character tests - [`8cfa0cf`](https://github.com/xoofx/markdig/commit/8cfa0cf0ae55fcff1aee61e402f727b2dd191420) Improve more character tests with SearchValues - [`7a9c192`](https://github.com/xoofx/markdig/commit/7a9c192d7dcad181cdcc58fe720351dc684d35b7) Speed up FencedCodeBlock rendering - [`eceb70c`](https://github.com/xoofx/markdig/commit/eceb70c16a19bb37fe71b93cb1159224e637f955) Avoid delegate allocations in AutoIdentifierExtension - [`da3d7f4`](https://github.com/xoofx/markdig/commit/da3d7f4f3a43b912dad373970963561dc612c84f) Improve some descriptions - [`c82a368`](https://github.com/xoofx/markdig/commit/c82a36884d34f90ad03ac946cd81eddd455767c3) Use the field keyword in a few places ### 📊 Changes **34 files changed** (+541 additions, -320 deletions) <details> <summary>View changed files</summary> 📝 `src/Markdig.Tests/TestCharHelper.cs` (+141 -11) 📝 `src/Markdig.WebApp/ApiController.cs` (+1 -1) 📝 `src/Markdig.WebApp/Startup.cs` (+1 -1) 📝 `src/Markdig/Extensions/Abbreviations/AbbreviationParser.cs` (+4 -7) 📝 `src/Markdig/Extensions/Alerts/AlertBlockRenderer.cs` (+0 -1) 📝 `src/Markdig/Extensions/Alerts/AlertInlineParser.cs` (+0 -1) 📝 `src/Markdig/Extensions/AutoIdentifiers/AutoIdentifierExtension.cs` (+8 -4) 📝 `src/Markdig/Extensions/AutoLinks/AutoLinkParser.cs` (+120 -141) 📝 `src/Markdig/Extensions/GenericAttributes/GenericAttributesParser.cs` (+1 -1) 📝 `src/Markdig/Extensions/Globalization/GlobalizationExtension.cs` (+1 -1) 📝 `src/Markdig/Extensions/MediaLinks/HostProviderBuilder.cs` (+9 -10) 📝 `src/Markdig/Extensions/MediaLinks/MediaOptions.cs` (+1 -1) 📝 `src/Markdig/Extensions/Yaml/YamlFrontMatterParser.cs` (+2 -2) 📝 `src/Markdig/Globals.cs` (+1 -0) 📝 `src/Markdig/Helpers/CharHelper.cs` (+101 -79) 📝 `src/Markdig/Helpers/CharNormalizer.cs` (+2 -2) 📝 `src/Markdig/Helpers/CharacterMap.cs` (+10 -5) 📝 `src/Markdig/Helpers/LinkHelper.cs` (+11 -11) 📝 `src/Markdig/Helpers/StringSlice.cs` (+2 -2) 📝 `src/Markdig/Markdig.targets` (+3 -3) _...and 14 more files_ </details> ### 📄 Description Improves parsing perf a bit (around 2-4 %). Logically separated in commits: - Removing branches from various character checks (removing redundant conditions in calling code, updating helpers) - A bit faster AutoLink and FencedCodeBlock matching - Removed per-parsing allocation of delegate captures in AutoIdentifiers - Using frozen collections in a few minor places --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
claunia added the pull-request label 2026-01-29 14:52:14 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/markdig#1258