Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 19 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -233,9 +233,26 @@ MySQL's `innodb_lock_wait_timeout` is in whole seconds, so sub-second timeouts a

## Unsupported query shapes

`UNION`, `EXCEPT`, `INTERSECT` combined with locking throw `LockingConfigurationException` at query execution time. Lock individual queries before combining results.
The following query shapes throw `LockingConfigurationException` at execution time:

`AsSplitQuery()` combined with locking throws `LockingConfigurationException` — use regular `Include()` instead. On PostgreSQL, `FOR UPDATE OF` is emitted automatically to handle the outer join.
- `UNION` / `EXCEPT` / `INTERSECT` / `CONCAT` — lock individual queries before combining results
- `AsSplitQuery()` — use regular `Include()` instead (PostgreSQL emits `FOR UPDATE OF` automatically for outer joins)
- `Distinct()` — not compatible with row-level locking on any supported database
- `CountAsync()` / `LongCountAsync()` / `SumAsync()` / `MaxAsync()` / `MinAsync()` — aggregate terminal operations are rejected because the result is a scalar, not a set of lockable rows; use `AnyAsync()` if you want to test for row existence with a lock

Explicit joins (LINQ `join` syntax, `SelectMany`), correlated subqueries (`Any`, `Contains`), `Where`+`OrderBy`+`Take` pagination, and all `Include` / `ThenInclude` shapes work correctly across all providers.

## Limitations

The following scenarios are not detected at build or execution time:

| Scenario | Behaviour | Notes |
|---|---|---|
| `FromSqlRaw` / `FromSql` + `ForUpdate()` | Lock clause appended to the wrapping `SELECT` — works in most cases; may fail if the raw SQL shape prevents composing a valid outer query | Test your specific query |
| `EF.CompileAsyncQuery` + `ForUpdate()` | **Throws at compile time.** `ForUpdate` is not a translatable LINQ expression and cannot be used inside `EF.CompileAsyncQuery`. | Architectural constraint of EF Core compiled queries |
| `ExecuteUpdate` / `ExecuteDelete` / `Database.ExecuteSqlRaw` | Locking has no effect — these bypass the query SQL generator | Use `ForUpdate()` only with `IQueryable<T>` |
| SQL Server nested subqueries | Table hints (`WITH (UPDLOCK, HOLDLOCK, ROWLOCK)`) are applied to all `TableExpression` nodes in the locking `SELECT`, including correlated subqueries | SQL Server requires per-table hints; subquery coverage is correct and intentional |
| GroupBy + ForUpdate | No compile-time error; the lock clause is applied to the outer `SELECT` that wraps EF Core's subquery translation, so the lock targets the grouping result rows rather than individual base-table rows — semantics may not be what you expect | |

## Supported database versions

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<PropertyGroup>
<OutputType>Exe</OutputType>
<!-- Pomelo.EntityFrameworkCore.MySql has no net10.0 build yet; benchmarks exercise all providers so cap at net9.0. -->
<TargetFramework>net9.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<IsPackable>false</IsPackable>
<GenerateDocumentationFile>false</GenerateDocumentationFile>
<ServerGarbageCollection>true</ServerGarbageCollection>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
```

BenchmarkDotNet v0.15.8, macOS Tahoe 26.4.1 (25E253) [Darwin 25.4.0]
Apple M3 Pro, 1 CPU, 12 logical and 12 physical cores
.NET SDK 10.0.201
[Host] : .NET 10.0.5 (10.0.5, 10.0.526.15411), Arm64 RyuJIT armv8.0-a
DefaultJob : .NET 10.0.5 (10.0.5, 10.0.526.15411), Arm64 RyuJIT armv8.0-a


```
| Method | Mean | Error | StdDev | Ratio | RatioSD | Allocated | Alloc Ratio |
|----------------- |----------:|----------:|----------:|------:|--------:|----------:|------------:|
| ShortSql_NoTag | 6.272 ns | 0.0845 ns | 0.0749 ns | 1.00 | 0.02 | - | NA |
| ShortSql_WithTag | 2.807 ns | 0.0269 ns | 0.0239 ns | 0.45 | 0.01 | - | NA |
| LongSql_NoTag | 55.605 ns | 0.6941 ns | 0.6153 ns | 8.87 | 0.14 | - | NA |
| LongSql_WithTag | 2.764 ns | 0.0318 ns | 0.0297 ns | 0.44 | 0.01 | - | NA |
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Method,Job,AnalyzeLaunchVariance,EvaluateOverhead,MaxAbsoluteError,MaxRelativeError,MinInvokeCount,MinIterationTime,OutlierMode,Affinity,EnvironmentVariables,Jit,LargeAddressAware,Platform,PowerPlanMode,Runtime,AllowVeryLargeObjects,Concurrent,CpuGroups,Force,HeapAffinitizeMask,HeapCount,NoAffinitize,RetainVm,Server,Arguments,BuildConfiguration,Clock,EngineFactory,NuGetReferences,Toolchain,IsMutator,InvocationCount,IterationCount,IterationTime,LaunchCount,MaxIterationCount,MaxWarmupIterationCount,MemoryRandomization,MinIterationCount,MinWarmupIterationCount,RunStrategy,UnrollFactor,WarmupCount,Mean,Error,StdDev,Ratio,RatioSD,Allocated,Alloc Ratio
ShortSql_NoTag,DefaultJob,False,Default,Default,Default,Default,Default,Default,000000000000,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 10.0,False,True,False,True,Default,Default,False,False,True,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,6.272 ns,0.0845 ns,0.0749 ns,1.00,0.02,0 B,NA
ShortSql_WithTag,DefaultJob,False,Default,Default,Default,Default,Default,Default,000000000000,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 10.0,False,True,False,True,Default,Default,False,False,True,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,2.807 ns,0.0269 ns,0.0239 ns,0.45,0.01,0 B,NA
LongSql_NoTag,DefaultJob,False,Default,Default,Default,Default,Default,Default,000000000000,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 10.0,False,True,False,True,Default,Default,False,False,True,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,55.605 ns,0.6941 ns,0.6153 ns,8.87,0.14,0 B,NA
LongSql_WithTag,DefaultJob,False,Default,Default,Default,Default,Default,Default,000000000000,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 10.0,False,True,False,True,Default,Default,False,False,True,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,2.764 ns,0.0318 ns,0.0297 ns,0.44,0.01,0 B,NA
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8' />
<title>EntityFrameworkCore.Locking.Benchmarks.Benchmarks.InterceptorBenchmarks-20260426-011635</title>

<style type="text/css">
table { border-collapse: collapse; display: block; width: 100%; overflow: auto; }
td, th { padding: 6px 13px; border: 1px solid #ddd; text-align: right; }
tr { background-color: #fff; border-top: 1px solid #ccc; }
tr:nth-child(even) { background: #f8f8f8; }
</style>
</head>
<body>
<pre><code>
BenchmarkDotNet v0.15.8, macOS Tahoe 26.4.1 (25E253) [Darwin 25.4.0]
Apple M3 Pro, 1 CPU, 12 logical and 12 physical cores
.NET SDK 10.0.201
[Host] : .NET 10.0.5 (10.0.5, 10.0.526.15411), Arm64 RyuJIT armv8.0-a
DefaultJob : .NET 10.0.5 (10.0.5, 10.0.526.15411), Arm64 RyuJIT armv8.0-a
</code></pre>
<pre><code></code></pre>

<table>
<thead><tr><th>Method </th><th>Mean</th><th>Error</th><th>StdDev</th><th>Ratio</th><th>RatioSD</th><th>Allocated</th><th>Alloc Ratio</th>
</tr>
</thead><tbody><tr><td>ShortSql_NoTag</td><td>6.272 ns</td><td>0.0845 ns</td><td>0.0749 ns</td><td>1.00</td><td>0.02</td><td>-</td><td>NA</td>
</tr><tr><td>ShortSql_WithTag</td><td>2.807 ns</td><td>0.0269 ns</td><td>0.0239 ns</td><td>0.45</td><td>0.01</td><td>-</td><td>NA</td>
</tr><tr><td>LongSql_NoTag</td><td>55.605 ns</td><td>0.6941 ns</td><td>0.6153 ns</td><td>8.87</td><td>0.14</td><td>-</td><td>NA</td>
</tr><tr><td>LongSql_WithTag</td><td>2.764 ns</td><td>0.0318 ns</td><td>0.0297 ns</td><td>0.44</td><td>0.01</td><td>-</td><td>NA</td>
</tr></tbody></table>
</body>
</html>
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
```

BenchmarkDotNet v0.15.8, macOS Tahoe 26.4.1 (25E253) [Darwin 25.4.0]
Apple M3 Pro, 1 CPU, 12 logical and 12 physical cores
.NET SDK 10.0.201
[Host] : .NET 10.0.5 (10.0.5, 10.0.526.15411), Arm64 RyuJIT armv8.0-a
DefaultJob : .NET 10.0.5 (10.0.5, 10.0.526.15411), Arm64 RyuJIT armv8.0-a


```
| Method | Mean | Error | StdDev | Ratio | RatioSD | Gen0 | Allocated | Alloc Ratio |
|--------------------------------- |---------:|----------:|----------:|------:|--------:|-------:|----------:|------------:|
| Postgres_NoLock | 2.841 μs | 0.0266 μs | 0.0207 μs | 1.00 | 0.01 | 0.0343 | 4.16 KB | 1.00 |
| Postgres_ForUpdate | 5.277 μs | 0.1024 μs | 0.1179 μs | 1.86 | 0.04 | 0.0305 | 6.02 KB | 1.45 |
| Postgres_ForUpdate_WithTimeout | 5.291 μs | 0.0898 μs | 0.1229 μs | 1.86 | 0.04 | 0.0305 | 6.05 KB | 1.46 |
| Postgres_ForUpdate_MultipleTags | 8.562 μs | 0.1566 μs | 0.1388 μs | 3.01 | 0.05 | 0.0610 | 9.16 KB | 2.20 |
| MySql_NoLock | 3.191 μs | 0.0638 μs | 0.0829 μs | 1.12 | 0.03 | 0.0381 | 4.76 KB | 1.14 |
| MySql_ForUpdate | 5.021 μs | 0.0459 μs | 0.0383 μs | 1.77 | 0.02 | 0.0305 | 6.33 KB | 1.52 |
| MySql_ForUpdate_MultipleTags | 8.305 μs | 0.1003 μs | 0.0889 μs | 2.92 | 0.04 | 0.0610 | 9.47 KB | 2.28 |
| SqlServer_NoLock | 2.918 μs | 0.0281 μs | 0.0249 μs | 1.03 | 0.01 | 0.0343 | 4.48 KB | 1.08 |
| SqlServer_ForUpdate | 5.039 μs | 0.0818 μs | 0.0725 μs | 1.77 | 0.03 | 0.0305 | 6.34 KB | 1.53 |
| SqlServer_ForUpdate_MultipleTags | 8.251 μs | 0.0702 μs | 0.0622 μs | 2.90 | 0.03 | 0.0610 | 9.48 KB | 2.28 |
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
Method,Job,AnalyzeLaunchVariance,EvaluateOverhead,MaxAbsoluteError,MaxRelativeError,MinInvokeCount,MinIterationTime,OutlierMode,Affinity,EnvironmentVariables,Jit,LargeAddressAware,Platform,PowerPlanMode,Runtime,AllowVeryLargeObjects,Concurrent,CpuGroups,Force,HeapAffinitizeMask,HeapCount,NoAffinitize,RetainVm,Server,Arguments,BuildConfiguration,Clock,EngineFactory,NuGetReferences,Toolchain,IsMutator,InvocationCount,IterationCount,IterationTime,LaunchCount,MaxIterationCount,MaxWarmupIterationCount,MemoryRandomization,MinIterationCount,MinWarmupIterationCount,RunStrategy,UnrollFactor,WarmupCount,Mean,Error,StdDev,Ratio,RatioSD,Gen0,Allocated,Alloc Ratio
Postgres_NoLock,DefaultJob,False,Default,Default,Default,Default,Default,Default,000000000000,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 10.0,False,True,False,True,Default,Default,False,False,True,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,2.841 μs,0.0266 μs,0.0207 μs,1.00,0.01,0.0343,4.16 KB,1.00
Postgres_ForUpdate,DefaultJob,False,Default,Default,Default,Default,Default,Default,000000000000,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 10.0,False,True,False,True,Default,Default,False,False,True,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,5.277 μs,0.1024 μs,0.1179 μs,1.86,0.04,0.0305,6.02 KB,1.45
Postgres_ForUpdate_WithTimeout,DefaultJob,False,Default,Default,Default,Default,Default,Default,000000000000,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 10.0,False,True,False,True,Default,Default,False,False,True,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,5.291 μs,0.0898 μs,0.1229 μs,1.86,0.04,0.0305,6.05 KB,1.46
Postgres_ForUpdate_MultipleTags,DefaultJob,False,Default,Default,Default,Default,Default,Default,000000000000,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 10.0,False,True,False,True,Default,Default,False,False,True,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,8.562 μs,0.1566 μs,0.1388 μs,3.01,0.05,0.0610,9.16 KB,2.20
MySql_NoLock,DefaultJob,False,Default,Default,Default,Default,Default,Default,000000000000,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 10.0,False,True,False,True,Default,Default,False,False,True,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,3.191 μs,0.0638 μs,0.0829 μs,1.12,0.03,0.0381,4.76 KB,1.14
MySql_ForUpdate,DefaultJob,False,Default,Default,Default,Default,Default,Default,000000000000,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 10.0,False,True,False,True,Default,Default,False,False,True,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,5.021 μs,0.0459 μs,0.0383 μs,1.77,0.02,0.0305,6.33 KB,1.52
MySql_ForUpdate_MultipleTags,DefaultJob,False,Default,Default,Default,Default,Default,Default,000000000000,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 10.0,False,True,False,True,Default,Default,False,False,True,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,8.305 μs,0.1003 μs,0.0889 μs,2.92,0.04,0.0610,9.47 KB,2.28
SqlServer_NoLock,DefaultJob,False,Default,Default,Default,Default,Default,Default,000000000000,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 10.0,False,True,False,True,Default,Default,False,False,True,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,2.918 μs,0.0281 μs,0.0249 μs,1.03,0.01,0.0343,4.48 KB,1.08
SqlServer_ForUpdate,DefaultJob,False,Default,Default,Default,Default,Default,Default,000000000000,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 10.0,False,True,False,True,Default,Default,False,False,True,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,5.039 μs,0.0818 μs,0.0725 μs,1.77,0.03,0.0305,6.34 KB,1.53
SqlServer_ForUpdate_MultipleTags,DefaultJob,False,Default,Default,Default,Default,Default,Default,000000000000,Empty,RyuJit,Default,Arm64,8c5e7fda-e8bf-4a96-9a85-a6e23a8c635c,.NET 10.0,False,True,False,True,Default,Default,False,False,True,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,Default,16,Default,8.251 μs,0.0702 μs,0.0622 μs,2.90,0.03,0.0610,9.48 KB,2.28
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8' />
<title>EntityFrameworkCore.Locking.Benchmarks.Benchmarks.SqlGenerationBenchmarks-20260426-011801</title>

<style type="text/css">
table { border-collapse: collapse; display: block; width: 100%; overflow: auto; }
td, th { padding: 6px 13px; border: 1px solid #ddd; text-align: right; }
tr { background-color: #fff; border-top: 1px solid #ccc; }
tr:nth-child(even) { background: #f8f8f8; }
</style>
</head>
<body>
<pre><code>
BenchmarkDotNet v0.15.8, macOS Tahoe 26.4.1 (25E253) [Darwin 25.4.0]
Apple M3 Pro, 1 CPU, 12 logical and 12 physical cores
.NET SDK 10.0.201
[Host] : .NET 10.0.5 (10.0.5, 10.0.526.15411), Arm64 RyuJIT armv8.0-a
DefaultJob : .NET 10.0.5 (10.0.5, 10.0.526.15411), Arm64 RyuJIT armv8.0-a
</code></pre>
<pre><code></code></pre>

<table>
<thead><tr><th>Method </th><th>Mean</th><th>Error</th><th>StdDev</th><th>Ratio</th><th>RatioSD</th><th>Gen0</th><th>Allocated</th><th>Alloc Ratio</th>
</tr>
</thead><tbody><tr><td>Postgres_NoLock</td><td>2.841 &mu;s</td><td>0.0266 &mu;s</td><td>0.0207 &mu;s</td><td>1.00</td><td>0.01</td><td>0.0343</td><td>4.16 KB</td><td>1.00</td>
</tr><tr><td>Postgres_ForUpdate</td><td>5.277 &mu;s</td><td>0.1024 &mu;s</td><td>0.1179 &mu;s</td><td>1.86</td><td>0.04</td><td>0.0305</td><td>6.02 KB</td><td>1.45</td>
</tr><tr><td>Postgres_ForUpdate_WithTimeout</td><td>5.291 &mu;s</td><td>0.0898 &mu;s</td><td>0.1229 &mu;s</td><td>1.86</td><td>0.04</td><td>0.0305</td><td>6.05 KB</td><td>1.46</td>
</tr><tr><td>Postgres_ForUpdate_MultipleTags</td><td>8.562 &mu;s</td><td>0.1566 &mu;s</td><td>0.1388 &mu;s</td><td>3.01</td><td>0.05</td><td>0.0610</td><td>9.16 KB</td><td>2.20</td>
</tr><tr><td>MySql_NoLock</td><td>3.191 &mu;s</td><td>0.0638 &mu;s</td><td>0.0829 &mu;s</td><td>1.12</td><td>0.03</td><td>0.0381</td><td>4.76 KB</td><td>1.14</td>
</tr><tr><td>MySql_ForUpdate</td><td>5.021 &mu;s</td><td>0.0459 &mu;s</td><td>0.0383 &mu;s</td><td>1.77</td><td>0.02</td><td>0.0305</td><td>6.33 KB</td><td>1.52</td>
</tr><tr><td>MySql_ForUpdate_MultipleTags</td><td>8.305 &mu;s</td><td>0.1003 &mu;s</td><td>0.0889 &mu;s</td><td>2.92</td><td>0.04</td><td>0.0610</td><td>9.47 KB</td><td>2.28</td>
</tr><tr><td>SqlServer_NoLock</td><td>2.918 &mu;s</td><td>0.0281 &mu;s</td><td>0.0249 &mu;s</td><td>1.03</td><td>0.01</td><td>0.0343</td><td>4.48 KB</td><td>1.08</td>
</tr><tr><td>SqlServer_ForUpdate</td><td>5.039 &mu;s</td><td>0.0818 &mu;s</td><td>0.0725 &mu;s</td><td>1.77</td><td>0.03</td><td>0.0305</td><td>6.34 KB</td><td>1.53</td>
</tr><tr><td>SqlServer_ForUpdate_MultipleTags</td><td>8.251 &mu;s</td><td>0.0702 &mu;s</td><td>0.0622 &mu;s</td><td>2.90</td><td>0.03</td><td>0.0610</td><td>9.48 KB</td><td>2.28</td>
</tr></tbody></table>
</body>
</html>
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
```

BenchmarkDotNet v0.15.8, macOS Tahoe 26.4.1 (25E253) [Darwin 25.4.0]
Apple M3 Pro, 1 CPU, 12 logical and 12 physical cores
.NET SDK 10.0.201
[Host] : .NET 10.0.5 (10.0.5, 10.0.526.15411), Arm64 RyuJIT armv8.0-a
DefaultJob : .NET 10.0.5 (10.0.5, 10.0.526.15411), Arm64 RyuJIT armv8.0-a


```
| Method | Mean | Error | StdDev | Ratio | RatioSD | Allocated | Alloc Ratio |
|---------------------- |----------:|----------:|----------:|------:|--------:|----------:|------------:|
| Old_StartsWith_Empty | 1.0166 ns | 0.0163 ns | 0.0152 ns | 1.00 | 0.02 | - | NA |
| New_Contains_Empty | 0.3772 ns | 0.0101 ns | 0.0095 ns | 0.37 | 0.01 | - | NA |
| Old_StartsWith_Single | 1.8758 ns | 0.0186 ns | 0.0165 ns | 1.85 | 0.03 | - | NA |
| New_Contains_Single | 6.0173 ns | 0.0465 ns | 0.0435 ns | 5.92 | 0.10 | - | NA |
| Old_StartsWith_Multi | 2.7227 ns | 0.0289 ns | 0.0270 ns | 2.68 | 0.05 | - | NA |
| New_Contains_Multi | 5.9900 ns | 0.0491 ns | 0.0435 ns | 5.89 | 0.09 | - | NA |
Loading
Loading