Skip to content

Reduce boxing while reading record fields to reduce unnecessary heap allocations and GC pressure - #35

Draft
Ovahlord wants to merge 5 commits into
wowdev:masterfrom
Ovahlord:boxing
Draft

Ovahlord wants to merge 5 commits into
wowdev:masterfrom
Ovahlord:boxing

Conversation

@Ovahlord

@Ovahlord Ovahlord commented Oct 14, 2026 •

Copy link
Copy Markdown
Contributor

This is the first part of my attempt of reducing GC pressure and reducing heap waste. The old approach of reading values was storing the reading methods with a generic object return type. This causes value types to get boxed and allocated on the heap which of course creates unnecessary waste.

We now copy values whenever possible (with a few exceptions when parsing IDs). My local benchmarks when loading 332 DBC storages have improved loading times by about 0.2 seconds: from 1.65 seconds down to 1.37

-- I am currently still in the process of evalulating further bottlenecks, so this is a draft for now

As of right now, these changes bring about 10 - 15% performance improvement.

There are some free gains which came with modern .NET releases that are currently not available because we still support .net standard 2.1 so we might also start discussing if we still want to maintain it or go for supporting only the latest supported .NET releases

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