Skip to content

Add benchmark results and update gitignore for BenchmarkDotNet#8

Open
dterziev wants to merge 4 commits intomasterfrom
claude/add-benchmark-results-58s09
Open

Add benchmark results and update gitignore for BenchmarkDotNet#8
dterziev wants to merge 4 commits intomasterfrom
claude/add-benchmark-results-58s09

Conversation

@dterziev
Copy link
Owner

Summary

This PR adds comprehensive benchmark results to the README and updates the gitignore to exclude BenchmarkDotNet artifacts.

Key Changes

  • Documentation: Added a "Results" section to README.md containing:

    • Benchmark environment details (.NET 8.0, 9.0, and 10.0)
    • Complete benchmark results table showing performance metrics for 10,000 row reads
    • Comparison of different mapping strategies (DefaultMapping, MappingExpressions, MappingDelegates)
    • Comparison of column access patterns (ByColumnIndex vs ByColumnName)
    • Performance metrics including Mean, Error, StdDev, Ratio, and memory allocation data
  • Build Configuration: Updated .gitignore to exclude BenchmarkDotNet.Artifacts/ directory generated during benchmark runs

Notable Details

The benchmark results demonstrate performance characteristics across multiple .NET versions, showing that column index access is generally faster than column name access, and that caching mapping strategies provides consistent performance benefits across all tested runtimes.

https://claude.ai/code/session_01Rjb1M2pVWrVUJJeyuL4VkN

Run BenchmarkDotNet across .NET 8.0, 9.0, and 10.0 and include the
full results table showing performance and memory allocation for all
mapping strategies and column access patterns.

https://claude.ai/code/session_01Rjb1M2pVWrVUJJeyuL4VkN
…enchmarks

- Replace Lazy<Dictionary> with FrozenDictionary for column name lookups,
  providing optimized hashing and eliminating volatile reads on every access
- Use FrozenDictionary.AlternateLookup<ReadOnlySpan<char>> for allocation-free
  string lookups in GetOrdinal (NET9_0_OR_GREATER)
- Fix IsDBNull double-evaluation bug that invoked the value getter twice
- Use Span-based iteration in GetValues for improved bounds check elimination
- Remove .NET 8.0 and .NET 9.0 from benchmark target runtimes
- Update README with .NET 10-only benchmark results

https://claude.ai/code/session_01Rjb1M2pVWrVUJJeyuL4VkN
- Remove net8.0 target from library and test projects (minimum is now net9.0)
- Remove all #if NET9_0_OR_GREATER guards since net9.0 is the floor;
  FrozenDictionary and AlternateLookup are now used unconditionally
- Restore .NET 9 runtime in the benchmark project alongside .NET 10
- Update README to reflect supported frameworks

https://claude.ai/code/session_01Rjb1M2pVWrVUJJeyuL4VkN
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.

2 participants