Not in the top 1,000 by GitHub stars

EgorBo/BlazingFastDotnet

Tips & tricks to tune .NET workloads for better perf (mostly, targeting benchmarks).

History

Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.

View weekly changes

SKILL.md

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Instructions only

First observation → 02ed682fb675

No earlier version was observed for comparison.

Compare on GitHub

View on GitHubAdd to my skills

Verified commit 02ed682fb675d2b247b24a58209147f765241d46

305GitHub stars
92stars in 7 days
1skill in this repository
30commits in 30 days

Heat

5.9
  • Star growth, last 7 daysNot available
  • Star growth, last 24 hoursNot available
  • Rank movement, last 7 daysNot available
  • Commits, last 30 daysNot available
  • Accounts asking about it through MCP, last 7 daysNot available
  • Hot votes this weekNot available

Heat never changes the order by stars, and sponsorship never touches it. How heat works

Stars over time

Oct 25, 2026Nov 5, 2026305

30-day change not yet available: not enough history.

Individual skills in this repository

How it works

blazing-fast-dotnet

When your agent uses it

High-performance .NET guidance for writing and tuning C# apps and benchmarks (BenchmarkDotNet, ASP.NET, challenges). Use when asked to make .NET code faster, reduce allocations or GC overhead, fix lock contention or thread pool starvation, inspect JIT codegen, profile apps, or tune runtime/NativeAOT settings.

What it loads into context

Frontmatter

75 tokens

Always available to the agent

SKILL.md

7,281 tokens

When the skill is activated

Reference documents

500 tokens

Loaded on request

Token counts are estimates. Scripts run separately; they are not counted as reference context.

The playbook

  1. dotnet-counters
  2. dotnet-trace
  3. Low-level profiling with Linux `perf`
  4. Popular low-level problems
  5. Inspecting JIT codegen
  6. Quick tips
  7. Strings and globalization
  8. Contention on shared state
  9. Safe vectorization (SIMD or SWAR)
  10. Generic specialization via static abstract members

Files

  • LICENSEasset1,063 bytes
  • README.mddoc2,183 bytes
  • SKILL.mdcore30,577 bytes
  • SKILL.mdcore30,577 bytes
  • SKILL.mdcore30,577 bytes
  • SKILL.mdcore30,577 bytes
  • SKILL.mdcore30,577 bytes
  • SKILL.mdcore30,577 bytes
  • SKILL.mdcore30,577 bytes
  • SKILL.mdcore30,577 bytes
  • SKILL.mdcore30,577 bytes
  • SKILL.mdcore30,577 bytes
  • SKILL.mdcore30,577 bytes
  • SKILL.mdcore30,577 bytes
  • SKILL.mdcore30,577 bytes
  • dummy.csasset67 bytes
Read SKILL.md

# Blazing Fast .NET Performance

> [!WARNING]
> Much of the advice here might not age well: as .NET evolves, old hacks and custom knobs may become obsolete or even detrimental. Apply only after careful consideration and testing. Revisit periodically to ensure continued relevance.

This skill focuses on optimizing .NET applications for maximum performance, providing tips, techniques, and best practices to achieve blazing-fast execution times. It targets .NET 10.0 and 11.0. Older versions have not been tested.

**Contents**

- [Profiling and Performance Analysis](#profiling-and-performance-analysis)
  - [dotnet-counters](#dotnet-counters)
  - [dotnet-trace](#dotnet-trace)
  - [Low-level profiling with Linux `perf`](#low-level-profiling-with-linux-perf)
  - [Popular low-level problems](#popular-low-level-problems)
View the complete source on GitHub

Skills included

  • blazing-fast-dotnet

Repository facts

License
MIT
Created
Oct 23, 2026
Last pushed
Nov 1, 2026
Forks
11
Open issues
0
Project activity
Active

Before you install

Instructions only

Automated signals, not a guarantee

Checked Nov 4, 2026

Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.

Show 12 notes
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • No broad tool permissions
  • No dangerous shell commands
  • 28 network referencesin 2 files: SKILL.md:46 README.md:10
  • No hidden or obfuscated text
  • No instruction overrides
  • No executable scripts
  • No access to secrets
  • No requests to vote in Hot
Show all 28 signals by file

README.md

  • Network accessline 10
    Read https://raw.githubusercontent.com/EgorBo/BlazingFastDotnet/main/SKILL.md and use it to
  • Network accessline 23
    Inspect the current codebase for issues listed in https://raw.githubusercontent.com/dotnet/docs/refs/heads/main/docs/standard/unsafe-code/best-practices.md
  • Network accessline 29
    The link points to a raw Markdown version of [this article](https://learn.microsoft.com/en-us/dotnet/standard/unsafe-code/best-practices).
  • Network accessline 35
    - `ArrayPool<T>`: renting and returning buffers by hand is too error-prone, and I don't want to be responsible for the resulting use-after-return and double-return bugs. - Third-party dependencies: I'd like to minimize the number of depende
  • Network accessline 36
    - Third-party dependencies: I'd like to minimize the number of dependencies. Currently, they are limited to:   - [BenchmarkDotNet](https://github.com/dotnet/BenchmarkDotNet)   - [FlameGraph](https://github.com/brendangregg/FlameGraph) (for 
  • Network accessline 37
    - [BenchmarkDotNet](https://github.com/dotnet/BenchmarkDotNet)
  • Network accessline 38
    - [FlameGraph](https://github.com/brendangregg/FlameGraph) (for `perf` flame graphs)

SKILL.md

  • Network accessline 46
    [dotnet-counters](https://learn.microsoft.com/dotnet/core/diagnostics/dotnet-counters) is a low-overhead, first-level triage tool. Run it while the app is under load:
  • Network accessline 54
    See the `System.Runtime` [built-in metrics](https://learn.microsoft.com/dotnet/core/diagnostics/built-in-metrics-runtime) (.NET 9+) for what each counter means.
  • Network accessline 58
    [dotnet-trace](https://learn.microsoft.com/dotnet/core/diagnostics/dotnet-trace) collects EventPipe traces on any OS without root or a native profiler (managed frames only):
  • Network accessline 67
    dotnet-trace report trace.nettrace topN -n 20           # top methods (exclusive) as plain text dotnet-trace report trace.nettrace topN -n 20 --inclusive dotnet-trace convert trace.nettrace --format Speedscope # open in https://www.speedsco
  • Network accessline 69
    dotnet-trace convert trace.nettrace --format Speedscope # open in https://www.speedscope.app
  • Network accessline 72
    For more tips on using `dotnet-trace`, refer to the [dotnet-trace collection skill](https://raw.githubusercontent.com/dotnet/skills/refs/heads/main/plugins/dotnet-diag/skills/dotnet-trace-collect/SKILL.md).
  • Network accessline 105
    # Generate flamegraph (svg) git clone --depth 1 --quiet https://github.com/brendangregg/FlameGraph || true
  • Network accessline 106
    git clone --depth 1 --quiet https://github.com/brendangregg/FlameGraph || true
  • Network accessline 159
    - Use [source-generated System.Text.Json](https://learn.microsoft.com/dotnet/standard/serialization/system-text-json/source-generation): pass generated `JsonTypeInfo<T>` to avoid reflection-based metadata discovery and enable supported seri
  • Network accessline 160
    - Use [`[LoggerMessage]`](https://learn.microsoft.com/dotnet/core/extensions/logging/source-generation) source-generated logging to avoid template parsing, boxing, and temporary allocations. Still guard expensive argument computation with `
  • Network accessline 161
    - Use [`[GeneratedRegex]`](https://learn.microsoft.com/dotnet/standard/base-types/regular-expression-source-generators) for compile-time-known patterns instead of runtime pattern compilation. Preserve options, culture, and match timeouts.
  • Network accessline 168
    - Use dictionary alternate lookups from spans: `dictionary.GetAlternateLookup<ReadOnlySpan<char>>()` avoids allocating temporary string keys when the comparer supports it. Use `TryGetAlternateLookup` when comparer support is not known. - Im
  • Network accessline 169
    - Implement `IEquatable<T>` and a good `GetHashCode` for struct dictionary/set keys. This can avoid expensive default equality paths, boxing, and collision-heavy hashes. - Try [`TensorPrimitives`](https://learn.microsoft.com/dotnet/api/syst
  • Network accessline 170
    - Try [`TensorPrimitives`](https://learn.microsoft.com/dotnet/api/system.numerics.tensors.tensorprimitives) before hand-vectorizing numeric operations. Its span-based implementations handle SIMD and tails; prefer it over manual SIMD loops o
  • Network accessline 171
    - Prefer [`[LibraryImport]`](https://learn.microsoft.com/dotnet/standard/native-interop/pinvoke-source-generation) over `[DllImport]` for supported signatures to generate marshalling at build time; both `DllImport` and `LibraryImport` requi
  • Network accessline 172
    - Use `static readonly` flags for genuinely immutable process-wide configuration. Optimized JIT code can fold their values and eliminate disabled branches. - Cache fields in locals in hot loops (`var items = _items;`). The JIT often can't d
  • Network accessline 173
    - Cache fields in locals in hot loops (`var items = _items;`). The JIT often can't do it for you: calls and stores through references may modify the field, and the memory model restricts hoisting reads. Locals also enable bounds check elimi
  • Network accessline 174
    - Consider `Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping` for UTF-8 JSON-only responses ([documentation](https://learn.microsoft.com/dotnet/standard/serialization/system-text-json/character-encoding#serialize-all-characters)). Neve
  • Network accessline 327
    More info about vectorization and SIMD in .NET can be found in the [official documentation](https://learn.microsoft.com/en-us/dotnet/standard/simd). Also consider using [TensorPrimitives](https://learn.microsoft.com/dotnet/api/system.numeri
  • Network accessline 471
    Recommended reading: Microsoft's [Optimizing AOT deployments](https://learn.microsoft.com/en-us/dotnet/core/deploying/native-aot/optimizing) article, plus the runtime's [CPU instruction-set tuning guide](https://github.com/dotnet/runtime/bl
  • Network accessline 489
    - Consider filing a [dotnet/runtime](https://github.com/dotnet/runtime/issues) issue only for a clear, reproducible missed optimization in the JIT or libraries with meaningful measured impact. Check for duplicates, include a minimal repro a

How the signals fit together

Facts from a static read of the files at the pinned commit. They describe what the code does, not why.

Signal confidence: 28 facts
  • Network access in code of documentationREADME.md:10Low confidence
  • Network access in code of documentationREADME.md:23Low confidence
  • Network access in prose of documentationREADME.md:29Low confidence
  • Network access in prose of documentationREADME.md:35Low confidence
  • Network access in prose of documentationREADME.md:36Low confidence
  • Network access in prose of documentationREADME.md:37Low confidence
  • Network access in prose of documentationREADME.md:38Low confidence
  • Network access in prose of the SKILL.mdSKILL.md:46Low confidence
  • Network access in prose of the SKILL.mdSKILL.md:54Low confidence
  • Network access in prose of the SKILL.mdSKILL.md:58Low confidence
  • Network access in code of the SKILL.mdSKILL.md:67High confidence
  • Network access in code of the SKILL.mdSKILL.md:69High confidence
  • Network access in prose of the SKILL.mdSKILL.md:72Low confidence
  • Network access in code of the SKILL.mdSKILL.md:105High confidence
  • Network access in code of the SKILL.mdSKILL.md:106High confidence
  • Network access in prose of the SKILL.mdSKILL.md:159Low confidence
  • Network access in prose of the SKILL.mdSKILL.md:160Low confidence
  • Network access in prose of the SKILL.mdSKILL.md:161Low confidence
  • Network access in prose of the SKILL.mdSKILL.md:168Low confidence
  • Network access in prose of the SKILL.mdSKILL.md:169Low confidence
  • Network access in prose of the SKILL.mdSKILL.md:170Low confidence
  • Network access in prose of the SKILL.mdSKILL.md:171Low confidence
  • Network access in prose of the SKILL.mdSKILL.md:172Low confidence
  • Network access in prose of the SKILL.mdSKILL.md:173Low confidence
  • Network access in prose of the SKILL.mdSKILL.md:174Low confidence
  • Network access in prose of the SKILL.mdSKILL.md:327Low confidence
  • Network access in prose of the SKILL.mdSKILL.md:471Low confidence
  • Network access in prose of the SKILL.mdSKILL.md:489Low confidence

Works with

Agent compatibility, from the files in this repository
AgentStatusEvidenceInstall to
Claude CodeCompatibleStandard SKILL.md SKILL.md.claude/skills/<skill-name>/
CodexCompatibleStandard SKILL.md SKILL.md.agents/skills/<skill-name>/
CursorCompatibleStandard SKILL.md SKILL.md.cursor/skills/<skill-name>/
Gemini CLICompatibleStandard SKILL.md SKILL.md.gemini/skills/<skill-name>/
GitHub CopilotCompatibleStandard SKILL.md SKILL.md.github/skills/<skill-name>/
OpenCodeCompatibleStandard SKILL.md SKILL.md.opencode/skills/<skill-name>/
  • Native The repository ships a manifest, folder or frontmatter field for this agent.
  • Compatible A standard SKILL.md that this agent can read.
  • Unknown No evidence either way.

Derived automatically from paths, manifests and frontmatter. Not tested on each agent.