mirror of
https://github.com/xoofx/markdig.git
synced 2026-02-14 05:45:05 +00:00
Cache HtmlRenderer on Pipeline for ToHtml(string, Pipeline)
This commit is contained in:
@@ -73,9 +73,18 @@ namespace Markdig
|
||||
public static string ToHtml(string markdown, MarkdownPipeline pipeline = null)
|
||||
{
|
||||
if (markdown == null) throw new ArgumentNullException(nameof(markdown));
|
||||
var writer = new StringWriter();
|
||||
ToHtml(markdown, writer, pipeline);
|
||||
return writer.ToString();
|
||||
pipeline = pipeline ?? new MarkdownPipelineBuilder().Build();
|
||||
pipeline = CheckForSelfPipeline(pipeline, markdown);
|
||||
|
||||
var renderer = pipeline.GetCacheableHtmlRenderer();
|
||||
|
||||
var document = Parse(markdown, pipeline);
|
||||
renderer.Render(document);
|
||||
renderer.Writer.Flush();
|
||||
|
||||
string html = renderer.Writer.ToString();
|
||||
pipeline.ReleaseCacheableHtmlRenderer(renderer);
|
||||
return html;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) Alexandre Mutel. All rights reserved.
|
||||
// Copyright (c) Alexandre Mutel. All rights reserved.
|
||||
// This file is licensed under the BSD-Clause 2 license.
|
||||
// See the license.txt file in the project root for more information.
|
||||
using System;
|
||||
@@ -63,5 +63,42 @@ namespace Markdig
|
||||
extension.Setup(this, renderer);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private HtmlRendererCache _rendererCache = null;
|
||||
|
||||
internal HtmlRenderer GetCacheableHtmlRenderer()
|
||||
{
|
||||
if (_rendererCache is null)
|
||||
{
|
||||
_rendererCache = new HtmlRendererCache
|
||||
{
|
||||
OnNewInstanceCreated = Setup
|
||||
};
|
||||
}
|
||||
return _rendererCache.Get();
|
||||
}
|
||||
internal void ReleaseCacheableHtmlRenderer(HtmlRenderer renderer)
|
||||
{
|
||||
_rendererCache.Release(renderer);
|
||||
}
|
||||
|
||||
private class HtmlRendererCache : ObjectCache<HtmlRenderer>
|
||||
{
|
||||
public Action<HtmlRenderer> OnNewInstanceCreated;
|
||||
|
||||
protected override HtmlRenderer NewInstance()
|
||||
{
|
||||
var writer = new StringWriter();
|
||||
var renderer = new HtmlRenderer(writer);
|
||||
OnNewInstanceCreated(renderer);
|
||||
return renderer;
|
||||
}
|
||||
|
||||
protected override void Reset(HtmlRenderer instance)
|
||||
{
|
||||
instance.Reset();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user