Skip to content

Commit 2519316

Browse files
committed
Small optimizations
1 parent 33ed03f commit 2519316

File tree

8 files changed

+28
-13
lines changed

8 files changed

+28
-13
lines changed

src/AsyncKeyLock.Benchmarks/AsyncKeyLock.Benchmarks.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,16 @@
33
<PropertyGroup>
44
<TargetFramework>net8.0</TargetFramework>
55
<ImplicitUsings>enable</ImplicitUsings>
6-
<Nullable>enable</Nullable>
6+
<Nullable>disable</Nullable>
77
<OutputType>Exe</OutputType>
88
</PropertyGroup>
99

1010
<ItemGroup>
11-
<PackageReference Include="AsyncKeyedLock" Version="6.2.6" />
11+
<PackageReference Include="AsyncKeyedLock" Version="6.3.4" />
1212
<PackageReference Include="BenchmarkDotNet" Version="0.13.12" />
1313
<PackageReference Include="NeoSmart.AsyncLock" Version="3.2.1" />
1414
<PackageReference Include="Nito.AsyncEx" Version="5.1.2" />
15-
<PackageReference Include="SixLabors.ImageSharp.Web" Version="3.1.0" />
15+
<PackageReference Include="SixLabors.ImageSharp.Web" Version="3.1.1" />
1616
</ItemGroup>
1717

1818
<ItemGroup>

src/AsyncKeyLock.Benchmarks/BenchmarkSimpleWriterLock.cs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using BenchmarkDotNet.Attributes;
1+
using AsyncKeyedLock;
2+
using BenchmarkDotNet.Attributes;
23
using BenchmarkDotNet.Order;
34

45
namespace AsyncKeyLock.Benchmarks;
@@ -13,11 +14,13 @@ public void GlobalSetup()
1314
_AsyncKeyLock = new AsyncLock();
1415
_NeoSmartLock = new NeoSmart.AsyncLock.AsyncLock();
1516
_NitoLock = new Nito.AsyncEx.AsyncLock();
17+
_asyncNonKeyedLocker = new AsyncNonKeyedLocker();
1618
}
1719

1820
private AsyncLock _AsyncKeyLock;
1921
private NeoSmart.AsyncLock.AsyncLock _NeoSmartLock;
2022
private Nito.AsyncEx.AsyncLock _NitoLock;
23+
private AsyncNonKeyedLocker _asyncNonKeyedLocker;
2124

2225
[Params(1_00, 1_000, 10_000)]
2326
public int NumberOfLocks;
@@ -57,4 +60,16 @@ public async Task Nito()
5760
}
5861
}
5962
}
63+
64+
[Benchmark]
65+
public async Task AsyncNonKeyedLocker()
66+
{
67+
for (int i = 0; i < NumberOfLocks; i++)
68+
{
69+
using (await _asyncNonKeyedLocker.LockAsync())
70+
{
71+
72+
}
73+
}
74+
}
6075
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
using AsyncKeyLock.Benchmarks;
22
using BenchmarkDotNet.Running;
33

4-
BenchmarkRunner.Run<BenchmarkSimpleKeyLock>();
4+
BenchmarkRunner.Run<BenchmarkSimpleWriterLock>();

src/AsyncKeyLock.Tests/AsyncKeyLock.Tests.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77
</PropertyGroup>
88

99
<ItemGroup>
10-
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
11-
<PackageReference Include="xunit" Version="2.6.5" />
12-
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.6">
10+
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.9.0" />
11+
<PackageReference Include="xunit" Version="2.7.0" />
12+
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.7">
1313
<PrivateAssets>all</PrivateAssets>
1414
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
1515
</PackageReference>

src/AsyncKeyLock/AsyncKeyLock.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
</ItemGroup>
3535

3636
<ItemGroup>
37-
<PackageReference Include="MinVer" Version="4.3.0">
37+
<PackageReference Include="MinVer" Version="5.0.0">
3838
<PrivateAssets>all</PrivateAssets>
3939
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
4040
</PackageReference>

src/AsyncKeyLock/AsyncLock.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ internal AsyncLock(object syncObject)
2525

2626
internal readonly object SyncObj;
2727

28-
private readonly Queue<TaskCompletionSource<ReaderReleaser>> _waitingReaders = new Queue<TaskCompletionSource<ReaderReleaser>>();
29-
private readonly Queue<TaskCompletionSource<WriterReleaser>> _waitingWriters = new Queue<TaskCompletionSource<WriterReleaser>>();
28+
private readonly Queue<TaskCompletionSource<ReaderReleaser>> _waitingReaders = new();
29+
private readonly Queue<TaskCompletionSource<WriterReleaser>> _waitingWriters = new();
3030

3131
private readonly Task<ReaderReleaser> _readerReleaserTask;
3232
private readonly Task<WriterReleaser> _writerReleaserTask;

src/AsyncKeyLock/AsyncLock~.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public AsyncLock(int maxPoolSize = 64)
1515
_pool = new Pool<AsyncLock>(maxPoolSize);
1616
}
1717

18-
private readonly IDictionary<TKey, AsyncLock> _locks = new Dictionary<TKey, AsyncLock>();
18+
private readonly Dictionary<TKey, AsyncLock> _locks = new();
1919
private readonly Pool<AsyncLock> _pool;
2020

2121
/// <summary>

src/AsyncKeyLock/Pool.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ namespace AsyncKeyLock;
99
/// </summary>
1010
internal sealed class Pool<T>
1111
{
12-
private readonly IList<T> _pool = new List<T>();
12+
private readonly List<T> _pool = new();
1313
private readonly int MaxPoolSize;
1414

1515
public Pool(int maxPoolSize = 64)

0 commit comments

Comments
 (0)