Skip to content

Commit 3061664

Browse files
authored
Cache for AssemblyDataProvider (#24)
1 parent f29168d commit 3061664

File tree

1 file changed

+18
-3
lines changed

1 file changed

+18
-3
lines changed

src/AssemblyLoader/Services/AssemblyDataProvider.cs

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
1-
using System.Diagnostics;
1+
using System;
2+
using System.Collections.Concurrent;
3+
using System.Diagnostics;
24
using System.Reflection;
35
using System.Threading.Tasks;
46
using BlazorLazyLoading.Abstractions;
7+
using BlazorLazyLoading.Comparers;
58
using BlazorLazyLoading.Models;
69

710
namespace BlazorLazyLoading.Services
@@ -11,24 +14,36 @@ public sealed class AssemblyDataProvider : IAssemblyDataProvider
1114
private readonly IAssemblyDataLocator _assemblyDataLocator;
1215
private readonly IContentFileReader _contentFileReader;
1316

17+
private readonly ConcurrentDictionary<AssemblyName, AssemblyData?> _assemblyDataCache;
18+
1419
public AssemblyDataProvider(
1520
IAssemblyDataLocator assemblyDataLocator,
1621
IContentFileReader contentFileReader)
1722
{
1823
_assemblyDataLocator = assemblyDataLocator;
1924
_contentFileReader = contentFileReader;
25+
_assemblyDataCache = new ConcurrentDictionary<AssemblyName, AssemblyData?>(AssemblyByNameAndVersionComparer.Default);
2026
}
2127

22-
public async Task<AssemblyData?> GetAssemblyDataAsync(AssemblyName assemblyName, AssemblyLoaderContext context)
28+
public async Task<AssemblyData?> GetAssemblyDataAsync(
29+
AssemblyName assemblyName,
30+
AssemblyLoaderContext context)
2331
{
32+
if (_assemblyDataCache.TryGetValue(assemblyName, out AssemblyData? data))
33+
{
34+
return data;
35+
}
36+
2437
var paths = _assemblyDataLocator.GetFindPaths(assemblyName, context);
2538

2639
foreach (var path in paths)
2740
{
28-
AssemblyData? data = await GetAssemblyDataAsync(assemblyName, path).ConfigureAwait(false);
41+
data = await GetAssemblyDataAsync(assemblyName, path).ConfigureAwait(false);
2942

3043
if (data != null)
3144
{
45+
_assemblyDataCache.TryAdd(assemblyName, data);
46+
3247
return data;
3348
}
3449
}

0 commit comments

Comments
 (0)