[PR #611] [MERGED] Improve rendering performance #1140

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

📋 Pull Request Information

Original PR: https://github.com/xoofx/markdig/pull/611
Author: @MihaZupan
Created: 3/20/2022
Status: Merged
Merged: 3/27/2022
Merged by: @xoofx

Base: masterHead: renderer-perf


📝 Commits (10+)

  • e36d456 Remove NormalizeAutoLinkRenderer
  • 14ab45c Move TryWriters to cold path
  • cc04208 Change IMarkdownObjectRenderer.Accept to take a Type instead of instance
  • 2604239 Move TryGetRenderer to cold path
  • 202ac1e Simplify RendererBase ctor
  • bb6ace1 Optimize RendererBase.Write
  • f3d6c27 Add Unsafe.As polyfill for NETSTANDARD 2.1
  • 3f3b3c4 Optimize renderers
  • 31904f6 Avoid allocating WriteEscapeIndexOfAnyChars
  • 9adf601 More WriteRaw

📊 Changes

27 files changed (+789 additions, -282 deletions)

View changed files

src/Markdig.Tests/TestFastStringWriter.cs (+189 -0)
📝 src/Markdig/Extensions/AutoLinks/AutoLinkExtension.cs (+0 -6)
src/Markdig/Extensions/AutoLinks/NormalizeAutoLinkRenderer.cs (+0 -33)
src/Markdig/Helpers/FastStringWriter.cs (+293 -0)
📝 src/Markdig/MarkdownPipeline.cs (+4 -6)
📝 src/Markdig/Parsers/BlockProcessor.cs (+4 -24)
📝 src/Markdig/Parsers/InlineProcessor.cs (+0 -4)
📝 src/Markdig/Parsers/Inlines/EmphasisInlineParser.cs (+0 -4)
📝 src/Markdig/Parsers/MarkdownParser.cs (+0 -9)
📝 src/Markdig/Polyfills/NullableAttributes.cs (+3 -0)
src/Markdig/Polyfills/Unsafe.cs (+17 -0)
📝 src/Markdig/Renderers/Html/CodeBlockRenderer.cs (+8 -11)
📝 src/Markdig/Renderers/Html/HeadingRenderer.cs (+11 -6)
📝 src/Markdig/Renderers/Html/Inlines/AutolinkInlineRenderer.cs (+7 -9)
📝 src/Markdig/Renderers/Html/Inlines/CodeInlineRenderer.cs (+4 -2)
📝 src/Markdig/Renderers/Html/Inlines/EmphasisInlineRenderer.cs (+8 -3)
📝 src/Markdig/Renderers/Html/Inlines/LinkInlineRenderer.cs (+10 -8)
📝 src/Markdig/Renderers/Html/ListRenderer.cs (+10 -4)
📝 src/Markdig/Renderers/Html/ParagraphRenderer.cs (+4 -2)
📝 src/Markdig/Renderers/Html/QuoteBlockRenderer.cs (+3 -1)

...and 7 more files

📄 Description

Closes #547

API change as mentioned in #547:

public interface IMarkdownObjectRenderer
{
-   bool Accept(RendererBase renderer, MarkdownObject obj);
+   bool Accept(RendererBase renderer, Type objectType);
}

Before

Method SourceText Mean Error StdDev Median Gen 0 Allocated
ToHtmlRenderOnly MarkdigReadme 127.31 us 0.296 us 0.433 us 127.36 us 8.5449 36 KB
ToHtmlRenderOnly TracingArticle 19.92 us 0.156 us 0.209 us 20.04 us 1.3428 6 KB

After

Method SourceText Mean Error StdDev Gen 0 Allocated
ToHtmlRenderOnly MarkdigReadme 69.793 us 0.0402 us 0.0550 us 8.6670 36 KB
ToHtmlRenderOnly TracingArticle 8.990 us 0.0297 us 0.0426 us 1.3428 6 KB

🔄 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/611 **Author:** [@MihaZupan](https://github.com/MihaZupan) **Created:** 3/20/2022 **Status:** ✅ Merged **Merged:** 3/27/2022 **Merged by:** [@xoofx](https://github.com/xoofx) **Base:** `master` ← **Head:** `renderer-perf` --- ### 📝 Commits (10+) - [`e36d456`](https://github.com/xoofx/markdig/commit/e36d4564f18579407c6e5bb3d81620c10a085663) Remove NormalizeAutoLinkRenderer - [`14ab45c`](https://github.com/xoofx/markdig/commit/14ab45cf8f7bf854c109376b5d47610ea134e6d0) Move TryWriters to cold path - [`cc04208`](https://github.com/xoofx/markdig/commit/cc04208b95f149af3f5d40ab6942e29bb4b25150) Change IMarkdownObjectRenderer.Accept to take a Type instead of instance - [`2604239`](https://github.com/xoofx/markdig/commit/260423976431a24e15d3862d4f2aba8c45c51b2b) Move TryGetRenderer to cold path - [`202ac1e`](https://github.com/xoofx/markdig/commit/202ac1e4f919331dcae9c2ef5f1ab22f118b2916) Simplify RendererBase ctor - [`bb6ace1`](https://github.com/xoofx/markdig/commit/bb6ace15b7e179c57fffa03b77c1b60092ed2aa6) Optimize RendererBase.Write - [`f3d6c27`](https://github.com/xoofx/markdig/commit/f3d6c2775bcc2aebabc334d122151744df79cc1f) Add Unsafe.As polyfill for NETSTANDARD 2.1 - [`3f3b3c4`](https://github.com/xoofx/markdig/commit/3f3b3c46b6a53eb737d24cd4b9d22958b03899e8) Optimize renderers - [`31904f6`](https://github.com/xoofx/markdig/commit/31904f6c53220a99eef553340fafb5ed6cd8dba9) Avoid allocating WriteEscapeIndexOfAnyChars - [`9adf601`](https://github.com/xoofx/markdig/commit/9adf60116b0d637b6527d17401d6099c176742a8) More WriteRaw ### 📊 Changes **27 files changed** (+789 additions, -282 deletions) <details> <summary>View changed files</summary> ➕ `src/Markdig.Tests/TestFastStringWriter.cs` (+189 -0) 📝 `src/Markdig/Extensions/AutoLinks/AutoLinkExtension.cs` (+0 -6) ➖ `src/Markdig/Extensions/AutoLinks/NormalizeAutoLinkRenderer.cs` (+0 -33) ➕ `src/Markdig/Helpers/FastStringWriter.cs` (+293 -0) 📝 `src/Markdig/MarkdownPipeline.cs` (+4 -6) 📝 `src/Markdig/Parsers/BlockProcessor.cs` (+4 -24) 📝 `src/Markdig/Parsers/InlineProcessor.cs` (+0 -4) 📝 `src/Markdig/Parsers/Inlines/EmphasisInlineParser.cs` (+0 -4) 📝 `src/Markdig/Parsers/MarkdownParser.cs` (+0 -9) 📝 `src/Markdig/Polyfills/NullableAttributes.cs` (+3 -0) ➕ `src/Markdig/Polyfills/Unsafe.cs` (+17 -0) 📝 `src/Markdig/Renderers/Html/CodeBlockRenderer.cs` (+8 -11) 📝 `src/Markdig/Renderers/Html/HeadingRenderer.cs` (+11 -6) 📝 `src/Markdig/Renderers/Html/Inlines/AutolinkInlineRenderer.cs` (+7 -9) 📝 `src/Markdig/Renderers/Html/Inlines/CodeInlineRenderer.cs` (+4 -2) 📝 `src/Markdig/Renderers/Html/Inlines/EmphasisInlineRenderer.cs` (+8 -3) 📝 `src/Markdig/Renderers/Html/Inlines/LinkInlineRenderer.cs` (+10 -8) 📝 `src/Markdig/Renderers/Html/ListRenderer.cs` (+10 -4) 📝 `src/Markdig/Renderers/Html/ParagraphRenderer.cs` (+4 -2) 📝 `src/Markdig/Renderers/Html/QuoteBlockRenderer.cs` (+3 -1) _...and 7 more files_ </details> ### 📄 Description Closes #547 API change as mentioned in #547: ```diff public interface IMarkdownObjectRenderer { - bool Accept(RendererBase renderer, MarkdownObject obj); + bool Accept(RendererBase renderer, Type objectType); } ``` Before | Method | SourceText | Mean | Error | StdDev | Median | Gen 0 | Allocated | |----------------- |--------------- |----------:|---------:|---------:|----------:|--------:|----------:| | ToHtmlRenderOnly | MarkdigReadme | 127.31 us | 0.296 us | 0.433 us | 127.36 us | 8.5449 | 36 KB | | ToHtmlRenderOnly | TracingArticle | 19.92 us | 0.156 us | 0.209 us | 20.04 us | 1.3428 | 6 KB | After | Method | SourceText | Mean | Error | StdDev | Gen 0 | Allocated | |----------------- |--------------- |-----------:|----------:|----------:|--------:|----------:| | ToHtmlRenderOnly | MarkdigReadme | 69.793 us | 0.0402 us | 0.0550 us | 8.6670 | 36 KB | | ToHtmlRenderOnly | TracingArticle | 8.990 us | 0.0297 us | 0.0426 us | 1.3428 | 6 KB | --- <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:50:17 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/markdig#1140