Skip to content

Commit 3bb8e26

Browse files
authored
Merge pull request #26 from marthijn/feature/objectpool
⚡️ Optimize StringBuilder usage with ObjectPool
2 parents 838ebf3 + 98e6f22 commit 3bb8e26

3 files changed

Lines changed: 31 additions & 10 deletions

File tree

src/Sidio.OpenGraph/OpenGraphBuilder.cs

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System.Text;
22
using Microsoft.Extensions.Logging;
3+
using Microsoft.Extensions.ObjectPool;
34

45
namespace Sidio.OpenGraph;
56

@@ -77,13 +78,22 @@ public void AddRange(IEnumerable<OpenGraphMetaTag> openGraphMetas)
7778
/// <inheritdoc />
7879
public string GetPrefixAttributeValue()
7980
{
80-
var sb = new StringBuilder();
81-
foreach (var ns in Namespaces)
81+
var pool = ObjectPool.Create<StringBuilder>();
82+
var sb = pool.Get();
83+
84+
try
8285
{
83-
sb.Append($"{ns.Prefix}: {ns.SchemaUri} ");
84-
}
86+
foreach (var ns in Namespaces)
87+
{
88+
sb.Append($"{ns.Prefix}: {ns.SchemaUri} ");
89+
}
8590

86-
return sb.ToString().Trim();
91+
return sb.ToString().Trim();
92+
}
93+
finally
94+
{
95+
pool.Return(sb);
96+
}
8797
}
8898

8999
/// <inheritdoc />

src/Sidio.OpenGraph/OpenGraphExtensions.cs

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System.Text;
2+
using Microsoft.Extensions.ObjectPool;
23

34
namespace Sidio.OpenGraph;
45

@@ -14,12 +15,21 @@ public static class OpenGraphExtensions
1415
/// <returns>A HTML <see cref="string"/>.</returns>
1516
public static string MetaTagsToHtml(this OpenGraph openGraph)
1617
{
17-
var builder = new StringBuilder();
18-
foreach (var property in openGraph.MetaTags)
18+
var pool = ObjectPool.Create<StringBuilder>();
19+
var builder = pool.Get();
20+
21+
try
1922
{
20-
builder.Append($"<meta property=\"{property.Property}\" content=\"{property.Content}\" />");
21-
}
23+
foreach (var property in openGraph.MetaTags)
24+
{
25+
builder.Append($"<meta property=\"{property.Property}\" content=\"{property.Content}\" />");
26+
}
2227

23-
return builder.ToString();
28+
return builder.ToString();
29+
}
30+
finally
31+
{
32+
pool.Return(builder);
33+
}
2434
}
2535
}

src/Sidio.OpenGraph/Sidio.OpenGraph.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525

2626
<ItemGroup>
2727
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="9.0.7" />
28+
<PackageReference Include="Microsoft.Extensions.ObjectPool" Version="9.0.8" />
2829
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="8.0.0">
2930
<PrivateAssets>all</PrivateAssets>
3031
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>

0 commit comments

Comments
 (0)