Skip to content

Updating native lib to LMDB 1.0 line with new API support#202

Open
CoreyKaylor wants to merge 2 commits into
mainfrom
lmdbv1
Open

Updating native lib to LMDB 1.0 line with new API support#202
CoreyKaylor wants to merge 2 commits into
mainfrom
lmdbv1

Conversation

@CoreyKaylor

Copy link
Copy Markdown
Owner

This updates the bundled native binaries to the LMDB 1.0 series and binds the new APIs. Opening this up for comments before shipping — it's published as 0.23.0-alpha for the reasons below.

⚠️ Breaking: the 1.0 on-disk format is incompatible with 0.9.x. Existing databases must be migrated once via mdb_dump (0.9 tools) → mdb_load (1.0 tools). DBI names are also stored NUL-terminated now.

What's new

  • Opt-in page encryption and checksums. LMDB ships no cipher; the library includes hardware-accelerated AES-256-GCM (AesGcmCipher) and SHA-256 (Sha256Checksum), with LightningCipher/LightningChecksum base classes for custom implementations.
  • Two-phase commit: tx.Prepare() + env.RollbackLastTransaction(txId).
  • Incremental backup: IncrementalCopyTo / IncrementalCopyToStream / LoadIncrementalFromStream.
  • EnvironmentConfiguration.PageSize, EnvironmentOpenFlags.PreviousSnapshot, per-transaction NoSync/NoMetaSync, and the new 1.0 error codes.

Why alpha

  • The LMDB_1.0.0 release tag doesn't compile for Windows and is missing ~20 post-release fixes to exactly the features bound here (ITS#10515, ITS#10518–10523). Binaries are built from a pinned mdb.master3 commit (7ed58053d0, self-reports 0.9.90) plus a small local mingw patch (lmdb/mingw-win32-fixes.patch). Will re-pin to the release tag and drop the patch when upstream cuts 1.0.1.
  • Upstream quirk found while testing: after mdb_env_rollback the environment can't be reopened unless a write commits first — documented on RollbackLastTransaction and covered by a test.

Feedback welcome, particularly on the encryption API shape before it stabilizes.

@github-actions

github-actions Bot commented Jul 5, 2026

Copy link
Copy Markdown

Benchmark Results

No significant performance regressions detected

⚠️ Minor performance degradation (20-40%)

1 benchmarks showed minor slowdown

All results (174 benchmarks)
Benchmark Baseline Current Change
ComparerReadBenchmarks.Read(OpsPerTransaction: 100, ValueSize: 64, Comparer: Length) 10585.04ns 12894.20ns ⚠️ +21.8%
CursorIterationBenchmarks.EnumerateBoxed(Entries: 1000, ValueSize: 256) 9797.89ns 11304.02ns ✅ +15.4%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 1000, ValueSize: 256, Comparer: ReverseGuid) 27189.50ns 31112.02ns ✅ +14.4%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 1000, ValueSize: 256, Comparer: ReverseBitwise) 27086.41ns 30967.33ns ✅ +14.3%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 1000, ValueSize: 256, Comparer: ReverseUtf8String) 27041.69ns 30603.31ns ✅ +13.2%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 1000, ValueSize: 256, Comparer: ReverseLength) 28459.92ns 31614.16ns ✅ +11.1%
IntegerComparerBenchmarks.WriteIntegers(KeySize: 4, OpsPerTransaction: 10000, Comparer: ReverseSignedInt) 1622648.92ns 1796629.87ns ✅ +10.7%
GuidComparerBenchmarks.WriteGuids(OpsPerTransaction: 1000, Comparer: Guid) 508729.37ns 557267.31ns ✅ +9.5%
CursorIterationBenchmarks.EnumerateForeach(Entries: 1000, ValueSize: 8) 8910.74ns 9698.51ns ✅ +8.8%
CursorIterationBenchmarks.EnumerateBoxed(Entries: 1000, ValueSize: 8) 8934.68ns 9643.71ns ✅ +7.9%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 1000, ValueSize: 256, Comparer: ReverseSignedInt) 174691.04ns 188010.50ns ✅ +7.6%
IntegerComparerBenchmarks.WriteIntegers(KeySize: 4, OpsPerTransaction: 10000, Comparer: ReverseUnsignedInt) 1699744.63ns 1821963.95ns ✅ +7.2%
ReadBenchmarks.Read(OpsPerTransaction: 100, ValueSize: 256, KeyOrder: Sequential) 6897.78ns 7362.05ns ✅ +6.7%
IntegerComparerBenchmarks.WriteIntegers(KeySize: 4, OpsPerTransaction: 1000, Comparer: SignedInt) 445724.50ns 475017.02ns ✅ +6.6%
ComparerReadBenchmarks.Read(OpsPerTransaction: 100, ValueSize: 256, Comparer: Default) 6969.59ns 7416.67ns ✅ +6.4%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 1000, ValueSize: 256, Comparer: LengthOnly) 274901.94ns 292187.15ns ✅ +6.3%
ComparerReadBenchmarks.Read(OpsPerTransaction: 100, ValueSize: 64, Comparer: Default) 6735.97ns 7157.07ns ✅ +6.3%
IntegerComparerBenchmarks.WriteIntegers(KeySize: 4, OpsPerTransaction: 1000, Comparer: UnsignedInt) 453012.30ns 480547.18ns ✅ +6.1%
ReadBenchmarks.Read(OpsPerTransaction: 1, ValueSize: 8, KeyOrder: Sequential) 196.35ns 208.08ns ✅ +6.0%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 1000, ValueSize: 256, Comparer: ReverseUnsignedInt) 168704.33ns 178633.51ns ✅ +5.9%
IntegerComparerBenchmarks.WriteIntegers(KeySize: 8, OpsPerTransaction: 10000, Comparer: ReverseSignedInt) 1574193.64ns 1662986.67ns ✅ +5.6%
ComparerReadBenchmarks.Read(OpsPerTransaction: 100, ValueSize: 64, Comparer: Bitwise) 10526.47ns 11115.85ns ✅ +5.6%
GuidComparerBenchmarks.WriteGuids(OpsPerTransaction: 10000, Comparer: ReverseGuid) 2739640.90ns 2888255.00ns ✅ +5.4%
ComparerReadBenchmarks.Read(OpsPerTransaction: 100, ValueSize: 64, Comparer: UnsignedInt) 10067.11ns 10609.81ns ✅ +5.4%
GuidComparerBenchmarks.WriteGuids(OpsPerTransaction: 10000, Comparer: Guid) 2665917.24ns 2806891.77ns ✅ +5.3%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 100, ValueSize: 256, Comparer: ReverseUtf8String) 242819.38ns 255361.94ns ✅ +5.2%
ComparerReadBenchmarks.Read(OpsPerTransaction: 100, ValueSize: 256, Comparer: ReverseGuid) 11038.94ns 11597.26ns ✅ +5.1%
ReadBenchmarks.Read(OpsPerTransaction: 100, ValueSize: 64, KeyOrder: Sequential) 6780.85ns 7117.39ns ✅ +5.0%
IntegerComparerBenchmarks.WriteIntegers(KeySize: 8, OpsPerTransaction: 10000, Comparer: Default) 2023578.47ns 2121562.08ns ✅ +4.8%
CursorIterationBenchmarks.TryGetAllocating(Entries: 1000, ValueSize: 256) 176520.15ns 184982.26ns ✅ +4.8%
ReadBenchmarks.Read(OpsPerTransaction: 1000, ValueSize: 256, KeyOrder: Sequential) 110750.22ns 116023.53ns ✅ +4.8%
ComparerReadBenchmarks.Read(OpsPerTransaction: 100, ValueSize: 256, Comparer: ReverseBitwise) 10710.61ns 11188.66ns ✅ +4.5%
ReadBenchmarks.Read(OpsPerTransaction: 1, ValueSize: 64, KeyOrder: Sequential) 191.74ns 199.94ns ✅ +4.3%
ComparerReadBenchmarks.Read(OpsPerTransaction: 1000, ValueSize: 64, Comparer: Default) 109620.38ns 114196.88ns ✅ +4.2%
ComparerReadBenchmarks.Read(OpsPerTransaction: 1000, ValueSize: 64, Comparer: LengthOnly) 35148.37ns 36593.89ns ✅ +4.1%
IntegerComparerBenchmarks.WriteIntegers(KeySize: 4, OpsPerTransaction: 10000, Comparer: UnsignedInt) 678255.97ns 706110.07ns ✅ +4.1%
IntegerComparerBenchmarks.WriteIntegers(KeySize: 8, OpsPerTransaction: 10000, Comparer: UnsignedInt) 510994.66ns 531978.71ns ✅ +4.1%
IntegerComparerBenchmarks.WriteIntegers(KeySize: 8, OpsPerTransaction: 10000, Comparer: ReverseUnsignedInt) 1586802.34ns 1651514.93ns ✅ +4.1%
ComparerReadBenchmarks.Read(OpsPerTransaction: 100, ValueSize: 64, Comparer: ReverseSignedInt) 10202.02ns 10602.42ns ✅ +3.9%
ComparerReadBenchmarks.Read(OpsPerTransaction: 1000, ValueSize: 256, Comparer: Default) 109645.52ns 113875.81ns ✅ +3.9%
ReadBenchmarks.Read(OpsPerTransaction: 1000, ValueSize: 8, KeyOrder: Sequential) 112096.12ns 116087.54ns ✅ +3.6%
ComparerReadBenchmarks.Read(OpsPerTransaction: 100, ValueSize: 256, Comparer: ReverseSignedInt) 10576.59ns 10932.68ns ✅ +3.4%
ComparerReadBenchmarks.Read(OpsPerTransaction: 100, ValueSize: 64, Comparer: Utf8String) 10426.83ns 10774.93ns ✅ +3.3%
ComparerReadBenchmarks.Read(OpsPerTransaction: 1000, ValueSize: 256, Comparer: LengthOnly) 35406.21ns 36564.89ns ✅ +3.3%
ReadBenchmarks.Read(OpsPerTransaction: 1000, ValueSize: 64, KeyOrder: Sequential) 109491.67ns 112985.10ns ✅ +3.2%
ComparerReadBenchmarks.Read(OpsPerTransaction: 100, ValueSize: 64, Comparer: ReverseGuid) 10661.45ns 10982.88ns ✅ +3.0%
ComparerReadBenchmarks.Read(OpsPerTransaction: 100, ValueSize: 256, Comparer: Length) 10935.22ns 11228.49ns ✅ +2.7%
ComparerReadBenchmarks.Read(OpsPerTransaction: 100, ValueSize: 256, Comparer: ReverseLength) 11036.15ns 11330.88ns ✅ +2.7%
ComparerReadBenchmarks.Read(OpsPerTransaction: 100, ValueSize: 256, Comparer: ReverseUtf8String) 10871.14ns 11159.75ns ✅ +2.7%
ComparerReadBenchmarks.Read(OpsPerTransaction: 100, ValueSize: 64, Comparer: ReverseUtf8String) 10524.18ns 10793.17ns ✅ +2.6%
ComparerReadBenchmarks.Read(OpsPerTransaction: 100, ValueSize: 256, Comparer: UnsignedInt) 10562.45ns 10817.87ns ✅ +2.4%
ReadBenchmarks.Read(OpsPerTransaction: 100, ValueSize: 8, KeyOrder: Sequential) 5378.77ns 5506.46ns ✅ +2.4%
WriteBenchmarks.Write(OpsPerTransaction: 100, ValueSize: 8, KeyOrder: Sequential) 183690.92ns 187956.88ns ✅ +2.3%
ComparerReadBenchmarks.Read(OpsPerTransaction: 100, ValueSize: 256, Comparer: LengthOnly) 3794.22ns 3879.93ns ✅ +2.3%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 100, ValueSize: 256, Comparer: LengthOnly) 184548.38ns 188471.93ns ✅ +2.1%
ComparerReadBenchmarks.Read(OpsPerTransaction: 1000, ValueSize: 256, Comparer: ReverseGuid) 173495.04ns 177108.09ns ✅ +2.1%
WriteBenchmarks.Write(OpsPerTransaction: 1, ValueSize: 256, KeyOrder: Sequential) 174549.36ns 178149.48ns ✅ +2.1%
ComparerReadBenchmarks.Read(OpsPerTransaction: 100, ValueSize: 64, Comparer: LengthOnly) 3767.12ns 3843.17ns ✅ +2.0%
GuidComparerBenchmarks.WriteGuids(OpsPerTransaction: 1000, Comparer: Default) 466440.95ns 475760.33ns ✅ +2.0%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 1000, ValueSize: 64, Comparer: ReverseUtf8String) 493449.01ns 502794.42ns ✅ +1.9%
ComparerReadBenchmarks.Read(OpsPerTransaction: 100, ValueSize: 256, Comparer: HashCode) 22419.03ns 22822.61ns ✅ +1.8%
ComparerReadBenchmarks.Read(OpsPerTransaction: 100, ValueSize: 256, Comparer: Bitwise) 10898.20ns 11082.58ns ✅ +1.7%
ComparerReadBenchmarks.Read(OpsPerTransaction: 1000, ValueSize: 64, Comparer: Utf8String) 169238.89ns 171934.55ns ✅ +1.6%
ComparerReadBenchmarks.Read(OpsPerTransaction: 100, ValueSize: 64, Comparer: ReverseLength) 10879.77ns 11052.16ns ✅ +1.6%
ComparerReadBenchmarks.Read(OpsPerTransaction: 1000, ValueSize: 64, Comparer: Bitwise) 169384.24ns 172036.11ns ✅ +1.6%
GuidComparerBenchmarks.WriteGuids(OpsPerTransaction: 1000, Comparer: Bitwise) 518758.27ns 526061.96ns ✅ +1.4%
GuidComparerBenchmarks.WriteGuids(OpsPerTransaction: 10000, Comparer: Bitwise) 2951723.12ns 2993022.04ns ✅ +1.4%
IntegerComparerBenchmarks.WriteIntegers(KeySize: 4, OpsPerTransaction: 10000, Comparer: SignedInt) 721067.10ns 731155.34ns ✅ +1.4%
CursorIterationBenchmarks.TryGetSpanDestination(Entries: 1000, ValueSize: 256) 129402.10ns 130978.44ns ✅ +1.2%
IntegerComparerBenchmarks.WriteIntegers(KeySize: 8, OpsPerTransaction: 10000, Comparer: SignedInt) 523964.70ns 530277.67ns ✅ +1.2%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 1000, ValueSize: 256, Comparer: Utf8String) 748752.40ns 757192.85ns ✅ +1.1%
ComparerReadBenchmarks.Read(OpsPerTransaction: 1000, ValueSize: 256, Comparer: SignedInt) 157034.27ns 158763.84ns ✅ +1.1%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 1000, ValueSize: 64, Comparer: ReverseSignedInt) 464151.18ns 468659.80ns ✅ +1.0%
ComparerReadBenchmarks.Read(OpsPerTransaction: 1000, ValueSize: 64, Comparer: ReverseUtf8String) 168546.41ns 170114.35ns ✅ +0.9%
ComparerReadBenchmarks.Read(OpsPerTransaction: 1000, ValueSize: 64, Comparer: SignedInt) 152561.29ns 153964.68ns ✅ +0.9%
ComparerReadBenchmarks.Read(OpsPerTransaction: 100, ValueSize: 256, Comparer: Utf8String) 10968.82ns 11069.18ns ✅ +0.9%
ComparerReadBenchmarks.Read(OpsPerTransaction: 100, ValueSize: 64, Comparer: HashCode) 21863.16ns 22058.13ns ✅ +0.9%
ComparerReadBenchmarks.Read(OpsPerTransaction: 100, ValueSize: 256, Comparer: ReverseUnsignedInt) 10676.62ns 10769.72ns ✅ +0.9%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 1000, ValueSize: 256, Comparer: Guid) 748980.56ns 755327.93ns ✅ +0.8%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 1000, ValueSize: 256, Comparer: Default) 750936.00ns 757146.45ns ✅ +0.8%
ComparerReadBenchmarks.Read(OpsPerTransaction: 100, ValueSize: 64, Comparer: Guid) 10704.31ns 10780.10ns ✅ +0.7%
ComparerReadBenchmarks.Read(OpsPerTransaction: 100, ValueSize: 64, Comparer: ReverseUnsignedInt) 10249.75ns 10301.26ns ✅ +0.5%
WriteBenchmarks.Write(OpsPerTransaction: 1, ValueSize: 8, KeyOrder: Sequential) 178141.34ns 178915.57ns ✅ +0.4%
WriteBenchmarks.Write(OpsPerTransaction: 1000, ValueSize: 256, KeyOrder: Sequential) 750347.14ns 753424.86ns ✅ +0.4%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 1000, ValueSize: 256, Comparer: Bitwise) 755823.96ns 758835.30ns ✅ +0.4%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 1000, ValueSize: 256, Comparer: Length) 753525.73ns 756485.96ns ✅ +0.4%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 100, ValueSize: 256, Comparer: HashCode) 245548.36ns 246421.51ns ✅ +0.4%
ComparerReadBenchmarks.Read(OpsPerTransaction: 1000, ValueSize: 256, Comparer: ReverseLength) 174537.20ns 175100.68ns ✅ +0.3%
WriteBenchmarks.Write(OpsPerTransaction: 100, ValueSize: 64, KeyOrder: Sequential) 201398.17ns 202011.96ns ✅ +0.3%
ComparerReadBenchmarks.Read(OpsPerTransaction: 1000, ValueSize: 64, Comparer: ReverseUnsignedInt) 156296.69ns 156688.17ns ✅ +0.3%
CursorIterationBenchmarks.TryGetSpanDestination(Entries: 1000, ValueSize: 8) 123709.62ns 123973.06ns ✅ +0.2%
ComparerReadBenchmarks.Read(OpsPerTransaction: 1000, ValueSize: 256, Comparer: ReverseSignedInt) 161998.10ns 162249.31ns ✅ +0.2%
ComparerReadBenchmarks.Read(OpsPerTransaction: 1000, ValueSize: 256, Comparer: ReverseUtf8String) 172349.75ns 172572.22ns ✅ +0.1%
ComparerReadBenchmarks.Read(OpsPerTransaction: 1000, ValueSize: 64, Comparer: Length) 172726.40ns 172765.82ns ✅ +0.0%
ComparerReadBenchmarks.Read(OpsPerTransaction: 100, ValueSize: 256, Comparer: Guid) 11089.88ns 11091.76ns ✅ +0.0%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 1000, ValueSize: 256, Comparer: SignedInt) 743961.58ns 743857.63ns ✅ -0.0%
ComparerReadBenchmarks.Read(OpsPerTransaction: 1000, ValueSize: 256, Comparer: Length) 171308.22ns 171280.66ns ✅ -0.0%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 100, ValueSize: 256, Comparer: Utf8String) 234999.47ns 234807.17ns ✅ -0.1%
CursorIterationBenchmarks.TryGetAllocating(Entries: 1000, ValueSize: 8) 136074.80ns 135867.11ns ✅ -0.2%
IntegerComparerBenchmarks.WriteIntegers(KeySize: 8, OpsPerTransaction: 1000, Comparer: SignedInt) 468440.37ns 467714.77ns ✅ -0.2%
ComparerReadBenchmarks.Read(OpsPerTransaction: 1000, ValueSize: 64, Comparer: ReverseLength) 171742.06ns 171414.00ns ✅ -0.2%
ComparerReadBenchmarks.Read(OpsPerTransaction: 1000, ValueSize: 256, Comparer: ReverseBitwise) 172056.05ns 171715.96ns ✅ -0.2%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 1000, ValueSize: 256, Comparer: UnsignedInt) 746972.43ns 744427.82ns ✅ -0.3%
IntegerComparerBenchmarks.WriteIntegers(KeySize: 4, OpsPerTransaction: 10000, Comparer: Default) 2414122.96ns 2405540.31ns ✅ -0.4%
WriteBenchmarks.Write(OpsPerTransaction: 1000, ValueSize: 8, KeyOrder: Sequential) 385937.84ns 384382.38ns ✅ -0.4%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 100, ValueSize: 64, Comparer: HashCode) 224124.11ns 222981.43ns ✅ -0.5%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 100, ValueSize: 64, Comparer: ReverseGuid) 212241.89ns 211127.61ns ✅ -0.5%
ComparerReadBenchmarks.Read(OpsPerTransaction: 1000, ValueSize: 256, Comparer: ReverseUnsignedInt) 161230.58ns 160167.06ns ✅ -0.7%
ComparerReadBenchmarks.Read(OpsPerTransaction: 1000, ValueSize: 64, Comparer: Guid) 171811.94ns 170599.83ns ✅ -0.7%
GuidComparerBenchmarks.WriteGuids(OpsPerTransaction: 10000, Comparer: Default) 2524593.03ns 2503635.24ns ✅ -0.8%
ComparerReadBenchmarks.Read(OpsPerTransaction: 1000, ValueSize: 64, Comparer: ReverseBitwise) 170464.39ns 168966.21ns ✅ -0.9%
IntegerComparerBenchmarks.WriteIntegers(KeySize: 4, OpsPerTransaction: 1000, Comparer: ReverseSignedInt) 485689.59ns 481295.42ns ✅ -0.9%
ComparerReadBenchmarks.Read(OpsPerTransaction: 100, ValueSize: 256, Comparer: SignedInt) 10654.84ns 10546.44ns ✅ -1.0%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 100, ValueSize: 64, Comparer: UnsignedInt) 211842.29ns 209675.32ns ✅ -1.0%
ComparerReadBenchmarks.Read(OpsPerTransaction: 1000, ValueSize: 256, Comparer: Bitwise) 171144.20ns 169349.58ns ✅ -1.0%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 1000, ValueSize: 64, Comparer: UnsignedInt) 470112.79ns 464901.35ns ✅ -1.1%
ComparerReadBenchmarks.Read(OpsPerTransaction: 1000, ValueSize: 64, Comparer: UnsignedInt) 155874.52ns 154045.64ns ✅ -1.2%
ComparerReadBenchmarks.Read(OpsPerTransaction: 100, ValueSize: 64, Comparer: SignedInt) 10407.54ns 10256.92ns ✅ -1.4%
ComparerReadBenchmarks.Read(OpsPerTransaction: 1000, ValueSize: 256, Comparer: UnsignedInt) 159715.61ns 157377.55ns ✅ -1.5%
ComparerReadBenchmarks.Read(OpsPerTransaction: 1000, ValueSize: 256, Comparer: HashCode) 336761.04ns 331277.46ns ✅ -1.6%
WriteBenchmarks.Write(OpsPerTransaction: 100, ValueSize: 256, KeyOrder: Sequential) 222733.14ns 219015.26ns ✅ -1.7%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 100, ValueSize: 64, Comparer: LengthOnly) 188982.02ns 185534.31ns ✅ -1.8%
GuidComparerBenchmarks.WriteGuids(OpsPerTransaction: 1000, Comparer: ReverseGuid) 500487.61ns 490958.91ns ✅ -1.9%
IntegerComparerBenchmarks.WriteIntegers(KeySize: 8, OpsPerTransaction: 1000, Comparer: ReverseUnsignedInt) 515295.77ns 505267.95ns ✅ -1.9%
ComparerReadBenchmarks.Read(OpsPerTransaction: 1000, ValueSize: 256, Comparer: Guid) 172479.13ns 169096.38ns ✅ -2.0%
ComparerReadBenchmarks.Read(OpsPerTransaction: 1000, ValueSize: 64, Comparer: ReverseGuid) 173460.30ns 169914.43ns ✅ -2.0%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 100, ValueSize: 256, Comparer: Default) 217577.70ns 212934.38ns ✅ -2.1%
IntegerComparerBenchmarks.WriteIntegers(KeySize: 4, OpsPerTransaction: 1000, Comparer: ReverseUnsignedInt) 487542.39ns 476383.65ns ✅ -2.3%
ReadBenchmarks.Read(OpsPerTransaction: 1, ValueSize: 256, KeyOrder: Sequential) 185.22ns 180.73ns ✅ -2.4%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 100, ValueSize: 64, Comparer: Length) 214014.20ns 208620.07ns ✅ -2.5%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 1000, ValueSize: 64, Comparer: ReverseUnsignedInt) 501971.40ns 488719.10ns ✅ -2.6%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 100, ValueSize: 64, Comparer: ReverseUnsignedInt) 220306.90ns 214460.00ns ✅ -2.7%
ComparerReadBenchmarks.Read(OpsPerTransaction: 1000, ValueSize: 256, Comparer: Utf8String) 172675.88ns 167581.09ns ✅ -3.0%
ComparerReadBenchmarks.Read(OpsPerTransaction: 100, ValueSize: 64, Comparer: ReverseBitwise) 11229.12ns 10897.39ns ✅ -3.0%
IntegerComparerBenchmarks.WriteIntegers(KeySize: 4, OpsPerTransaction: 1000, Comparer: Default) 418950.61ns 406374.00ns ✅ -3.0%
ComparerReadBenchmarks.Read(OpsPerTransaction: 1000, ValueSize: 64, Comparer: ReverseSignedInt) 159596.40ns 154783.78ns ✅ -3.0%
WriteBenchmarks.Write(OpsPerTransaction: 1000, ValueSize: 64, KeyOrder: Sequential) 464114.05ns 449954.82ns ✅ -3.1%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 100, ValueSize: 64, Comparer: ReverseSignedInt) 217281.97ns 210442.09ns ✅ -3.1%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 1000, ValueSize: 64, Comparer: ReverseGuid) 492563.15ns 477025.35ns ✅ -3.2%
IntegerComparerBenchmarks.WriteIntegers(KeySize: 8, OpsPerTransaction: 1000, Comparer: UnsignedInt) 471499.36ns 455620.89ns ✅ -3.4%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 100, ValueSize: 256, Comparer: SignedInt) 228831.32ns 221083.71ns ✅ -3.4%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 100, ValueSize: 256, Comparer: ReverseUnsignedInt) 243059.96ns 234798.69ns ✅ -3.4%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 1000, ValueSize: 64, Comparer: ReverseLength) 506542.41ns 488723.57ns ✅ -3.5%
IntegerComparerBenchmarks.WriteIntegers(KeySize: 8, OpsPerTransaction: 1000, Comparer: ReverseSignedInt) 531575.93ns 512810.35ns ✅ -3.5%
ComparerReadBenchmarks.Read(OpsPerTransaction: 1000, ValueSize: 64, Comparer: HashCode) 337457.85ns 323954.23ns ✅ -4.0%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 1000, ValueSize: 64, Comparer: ReverseBitwise) 512666.16ns 491697.44ns ✅ -4.1%
WriteBenchmarks.Write(OpsPerTransaction: 1, ValueSize: 64, KeyOrder: Sequential) 180333.47ns 172943.62ns ✅ -4.1%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 1000, ValueSize: 64, Comparer: LengthOnly) 262257.45ns 250508.60ns ✅ -4.5%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 100, ValueSize: 64, Comparer: Default) 209928.81ns 200485.81ns ✅ -4.5%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 1000, ValueSize: 64, Comparer: HashCode) 661250.87ns 631435.03ns ✅ -4.5%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 100, ValueSize: 256, Comparer: Bitwise) 229913.87ns 219349.52ns ✅ -4.6%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 100, ValueSize: 64, Comparer: Guid) 213464.49ns 202597.99ns ✅ -5.1%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 100, ValueSize: 64, Comparer: Utf8String) 214330.89ns 203418.82ns ✅ -5.1%
CursorIterationBenchmarks.EnumerateForeach(Entries: 1000, ValueSize: 256) 11910.98ns 11295.50ns ✅ -5.2%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 1000, ValueSize: 64, Comparer: SignedInt) 461856.29ns 437819.22ns ✅ -5.2%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 1000, ValueSize: 64, Comparer: Bitwise) 501142.62ns 473187.19ns ✅ -5.6%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 100, ValueSize: 256, Comparer: Guid) 231832.86ns 218240.50ns ✅ -5.9%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 100, ValueSize: 64, Comparer: SignedInt) 216875.14ns 203891.77ns ✅ -6.0%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 100, ValueSize: 256, Comparer: Length) 234152.11ns 218524.89ns ✅ -6.7%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 100, ValueSize: 64, Comparer: ReverseBitwise) 217167.17ns 202134.18ns ✅ -6.9%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 100, ValueSize: 64, Comparer: ReverseLength) 217911.16ns 201884.49ns ✅ -7.4%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 1000, ValueSize: 64, Comparer: Default) 447270.23ns 413463.75ns ✅ -7.6%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 100, ValueSize: 256, Comparer: UnsignedInt) 243162.28ns 224493.66ns ✅ -7.7%
IntegerComparerBenchmarks.WriteIntegers(KeySize: 8, OpsPerTransaction: 1000, Comparer: Default) 462403.20ns 422610.26ns ✅ -8.6%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 100, ValueSize: 64, Comparer: ReverseUtf8String) 230304.23ns 210202.50ns ✅ -8.7%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 100, ValueSize: 256, Comparer: ReverseBitwise) 252500.81ns 224762.29ns ✅ -11.0%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 1000, ValueSize: 64, Comparer: Length) 516718.09ns 458291.58ns ✅ -11.3%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 1000, ValueSize: 64, Comparer: Guid) 521414.36ns 457989.68ns ✅ -12.2%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 1000, ValueSize: 64, Comparer: Utf8String) 555457.77ns 487356.08ns ✅ -12.3%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 100, ValueSize: 256, Comparer: ReverseSignedInt) 268321.35ns 234930.39ns ✅ -12.4%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 100, ValueSize: 256, Comparer: ReverseGuid) 266582.37ns 230179.84ns ✅ -13.7%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 100, ValueSize: 256, Comparer: ReverseLength) 270658.79ns 231558.44ns ✅ -14.4%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 1000, ValueSize: 256, Comparer: HashCode) 46777.72ns 39986.63ns ✅ -14.5%
ComparerWriteBenchmarks.Write(OpsPerTransaction: 100, ValueSize: 64, Comparer: Bitwise) 244621.98ns 203783.83ns ✅ -16.7%

Pin to the 1.0 release-engineering tip so Windows compile/runtime fixes
land from upstream (ITS#10538-10539, ITS#10542) and replace the larger
local mingw patch with a minimal SIZE_T MAP() type fix. Rebuild all
native runtimes against that pin.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant