The performance and Native AOT cheat sheet
Measure first, then pick the knob.
This pillar collects everything on the site about making code faster and smaller - profiling before you guess, allocation and Span<T> work, caching, the JIT and compression changes in the .NET 11 cycle, and the constraints Native AOT puts on your code.
What to read first
Measure first: profiling with dotnet-trace and diagnosing a managed memory leak with gcdump and dump are the two loops worth learning. Before you tune anything, tiered compilation and PGO explain what the runtime already does for free - the newest example is the JIT devirtualizing generic virtual methods.
For allocation, what Span<T> actually speeds up leads and List vs Span vs ReadOnlySpan picks the type. Shipping smaller? Native AOT vs ReadyToRun vs JIT settles the fork, what Native AOT costs you is the honest ledger, and trim-safe code is the discipline; the failure you’ll hit first is reflection-based serialization disabled. On the server, HybridCache vs IMemoryCache vs IDistributedCache and detecting N+1 queries remove more time than any micro-optimisation.
What’s on this page
The list below auto-collects posts tagged with any of: performance, native-aot - which pulls in the Flutter and Dart performance posts too. Newest first.
Companion pillars: async and concurrency and the .NET 11 tracker.
Index (82 posts)
2026 / 09
- How to speed up a slow Dart analysis server in VS Code for a large Flutter monorepo
A monorepo with dozens of pubspec.yaml files makes the Dart analysis server build one analysis context per package, which is where the memory and the minute-long startup go. Convert to a pub workspace, exclude generated code in analysis_options.yaml, drop legacy analyzer plugins, and use the Insights page to prove it. Measured on Dart 3.12.2: 2.3x less peak memory and half the cold analysis time.
- CanvasKit vs skwasm for Flutter web in 2026: which renderer should you ship?
Ship skwasm with flutter build web --wasm when your dependencies compile to Wasm: it downloads less and rendered 36% more frames than CanvasKit on a heavy scene. On Flutter 3.47.x, keep it single-threaded until the multi-threaded text crash fix leaves beta.
- The .NET 11 JIT Devirtualizes Generic Virtual Methods, and the Allocation Goes With Them
Stephen Toub's Performance Improvements in .NET 11 post shows generic virtual method calls dropping from 6.7 ns and 24 bytes to 1.8 ns and zero allocation. Three RyuJIT pull requests unlocked inlining on the dispatch that used to be the most opaque one in .NET.
- Lookup<TKey, TElement> vs Dictionary<TKey, List<TValue>> for duplicate keys in C#
Use ToLookup when you group once and only read: it is immutable, returns an empty sequence for missing keys, accepts null keys and keeps first-seen order. Use Dictionary<TKey, List<TValue>> when the groups change after construction or cross a JSON boundary.
- Fix: PublishAot plus EFOptimizeContext exhausts memory during an EF Core build
EF Core's build-time model generation re-entered MSBuild until RAM ran out. Upgrade Tasks and Design to 10.0.10+, and on EF Core 11 delete EFOptimizeContext.
- How to find the async void handlers causing ANRs in a .NET MAUI Android app
Play Console tells you your ANR rate is over 0.47% and hands you a native stack full of libcoreclr.so frames. Here is how to get from that useless trace to the exact async void event handler that blocked the main thread, using a Looper printer, a SynchronizationContext wrapper that names the state machine, and dotnet-trace over dsrouter.
- MSTest 4.4 Graduates the Reflection Source Generator, and Native AOT Projects Get It Automatically
MSTest 4.4 moves MSTest.SourceGeneration out of experimental and aligns it with the MSTest version. Native AOT test projects pick it up with no opt-in, ReflectionFree mode can now skip runtime discovery for plain [TestMethod] and [DataRow], and five AOTSG diagnostics tell you which test shapes will not survive.
- What is the W^X flag in .NET and does Native AOT need it?
W^X (write xor execute) is the rule that no memory page is writable and executable at the same time. In .NET it is the DOTNET_EnableWriteXorExecute knob, on by default since .NET 7, and it exists entirely for the JIT. Native AOT never reads it. Here is how the runtime implements it, what it costs, and when turning it off is a legitimate fix.
- Framework-dependent vs self-contained vs Native AOT for a .NET 11 container image
Framework-dependent on a chiseled aspnet image is the right default for an ASP.NET Core service on .NET 11, because the runtime layer is shared across services and a runtime CVE is fixed by a base image bump. Self-contained trimmed and Native AOT buy a 2x to 5x smaller image and a much faster cold start, and cost you that. Real published sizes, the layer-sharing math, and the .NET 11 base image inference bug that breaks the AOT path.
- Returning a Task directly vs async/await passthrough in a C# repository method: which should you use?
Eliding async/await in a repository passthrough saves about 6 ns and 72 bytes, and costs you a stack frame, try/catch semantics, and safe disposal. Keep return await unless the method is a pure passthrough on a measured hot path.
2026 / 08
- AutoMapper vs Mapperly vs hand-written mapping in 2026
Mapperly is the default for new .NET code: it matches hand-written speed, survives Native AOT, and catches unmapped members at build time. AutoMapper still wins on ProjectTo. Benchmarks and license thresholds included.
- Fix: Model building is not supported when publishing with NativeAOT in a .NET MAUI iOS build
iOS builds set DynamicCodeSupport=false, so EF Core refuses to build the model even though you never enabled NativeAOT. Ship a compiled model plus precompiled queries, or turn the interpreter back on.
- How to tell whether an IEnumerable<T> has already been materialized in C#
There is no HasBeenEnumerated flag on IEnumerable<T>. Here is what TryGetNonEnumeratedCount actually checks, why Enumerable.Range passes an ICollection<T> test, and the guard that avoids a wasted ToList().
- Fix: CA1873 "Evaluation of this argument may be expensive and unnecessary if logging is disabled"
CA1873 fires on the implicit params object[] allocation, so almost every LogDebug call trips it. Fix it with [LoggerMessage] or an IsEnabled guard.
- Zstandard vs Brotli vs Gzip response compression in .NET 11
Zstandard is the right default for dynamic API responses in .NET 11, but not at the quality the ASP.NET Core provider ships with. Benchmarks on real JSON payloads showing why quality 1 beats the default quality 3 on both size and CPU, when Brotli still wins, and why Gzip survives only as a fallback.
- How to configure Kestrel to serve HTTP/3 in ASP.NET Core 11
A complete guide to enabling HTTP/3 on Kestrel in ASP.NET Core 11: the HttpProtocols.Http1AndHttp2AndHttp3 endpoint config, MsQuic platform requirements on Windows, Linux, and macOS, why the first request is never HTTP/3, how to verify with HttpClient and middleware, QuicTransportOptions tuning, and the firewall and proxy gotchas that make it silently fall back.
- How to replace new Regex(...) with the [GeneratedRegex] source generator in .NET 11
A complete guide to converting new Regex(pattern, RegexOptions.Compiled) into [GeneratedRegex] in .NET 11: the mechanical rewrite, partial methods vs partial properties, measured startup and throughput numbers, the SYSLIB1040-1045 diagnostics, and the two patterns where the generator silently falls back to a cached Regex.
- How to run CPU-bound work in a Blazor WebAssembly app with Web Workers in .NET 11
A complete guide to offloading CPU-bound work off the Blazor WebAssembly UI thread in .NET 11: why Task.Run does not help, the new blazorwebworker template, the WebWorkerClient API with cancellation and timeouts, the JSExport marshalling limits, and the second-runtime cost you pay per worker.
2026 / 07
- Fix: Reflection-based serialization has been disabled for this application
This InvalidOperationException means PublishTrimmed or PublishAot flipped JsonSerializerIsReflectionEnabledByDefault to false. Fix it with a source-generated JsonSerializerContext.
- How to build a Flutter web app with WebAssembly using flutter build web --wasm
A complete guide to shipping a Flutter web app compiled to WebAssembly on Flutter 3.44: what the two emitted builds look like, why Firefox and Safari still get JavaScript because of the loader's wasmAllowList, migrating off dart:html for dart2wasm, the COOP/COEP headers that decide whether skwasm runs multi-threaded, and how to prove at runtime which build the browser actually loaded.
- How to diagnose a managed memory leak with dotnet-gcdump and dotnet-dump
A complete workflow for finding a managed memory leak in .NET 11: confirm growth with dotnet-counters, take two gcdumps and diff them, then collect a dump and use dumpheap, gcroot, and objsize in dotnet-dump analyze to find what is still holding the reference.
- WebApplication.CreateBuilder vs CreateSlimBuilder vs CreateEmptyBuilder in ASP.NET Core 11
Use CreateBuilder for a normal app, CreateSlimBuilder when you publish trimmed or Native AOT behind a TLS proxy, and CreateEmptyBuilder only when you want to register every service yourself. Here is the feature matrix and the gotchas that force the call.
- Output caching vs response caching in ASP.NET Core 11: which should you use?
Output caching is the right default for almost every server-side app in ASP.NET Core 11. Response caching only wins when your goal is to steer browser and proxy caches through HTTP headers. Here is the decision, with a feature matrix and the gotchas that force the call.
- How to add response compression to an ASP.NET Core 11 API
A complete guide to response compression in ASP.NET Core 11: AddResponseCompression and UseResponseCompression, the new built-in Zstandard provider alongside Brotli and Gzip, compression levels, EnableForHttps and the CRIME/BREACH risk, custom MIME types, middleware ordering, and when to let the reverse proxy do it instead.
- How to add output caching to a minimal API in ASP.NET Core 11
A complete, working guide to output caching in an ASP.NET Core 11 minimal API: AddOutputCache and UseOutputCache, CacheOutput on endpoints and MapGroup, named and base policies, Expire, VaryByQuery and VaryByHeader, tag-based eviction with EvictByTagAsync, cache stampede protection, ETag revalidation, and a Redis backing store.
- .NET 11 Runtime Async Drops the EnablePreviewFeatures Flag
As the .NET 11 previews progress toward the November release, Runtime Async has graduated: net11.0 projects opt in with a single MSBuild property, and the runtime libraries themselves now ship compiled on it.
- What is PGO in .NET and do I need to opt in?
PGO (profile-guided optimization) lets the .NET JIT specialize hot code for the types and branches your workload actually hits. Dynamic PGO has been on by default since .NET 8, so on .NET 8 and later you do not need to opt in. Here is what it does, how to see its effect, and the rare cases where you touch the knob.
- What is tiered compilation and how do I reason about it?
Tiered compilation lets the .NET JIT compile every method twice: once fast and unoptimized to get your app running, then again with full optimizations once the runtime knows a method is hot. Here is how tier 0, tier 1, on-stack replacement, and Dynamic PGO fit together, and how to observe and tune them.
- What is trim-safe code and how do I write it?
Trim-safe code is code the .NET trimmer can statically prove is reachable, so it survives when unused code is removed from a self-contained app. This is the practical guide: turn on the analyzer, drive every IL2xxx warning to zero, annotate reflection with DynamicallyAccessedMembers, propagate RequiresUnreferencedCode to public APIs, and replace unanalyzable patterns with source generators.
- SkiaSharp 4.0 Ships Stable: 24% Faster GPU Rendering and a Cleaned-Up API
SkiaSharp 4.148.0 is the first stable v4 release. GPU-heavy UIs render up to 24% faster, CPU shaders run ~6x faster, and the legacy API surface is finally retired. Here is what upgrading actually costs you.
2026 / 06
- How to do keyset (cursor) pagination in EF Core 11
Replace Skip/Take with a WHERE clause that seeks past the last row you saw. Order by a fully unique key, carry the last row's values as a cursor, and EF Core 11 turns the next page into an index seek instead of an OFFSET scan.
- What is Span<T> in C#, and when does it actually make your code faster?
Span<T> is a stack-only ref struct that points at memory you already own, so it has no backing allocation. It speeds code up in exactly three situations: replacing a heap buffer with stackalloc, slicing without copying, and tight loops where the JIT elides bounds checks. Everywhere else it changes nothing, and across an await it does not compile.
- What is the DynamicallyAccessedMembers attribute?
DynamicallyAccessedMembers tells the .NET trimmer and AOT compiler which members of a Type you reach by reflection, so they are kept instead of trimmed away. It turns a silent runtime MissingMethodException into a build-time IL2070 warning. Here is what the attribute does, how the data-flow analysis behind it works, and how to annotate parameters, fields, and generic type parameters correctly.
- What is ValueTask<T> and when is it worth it?
ValueTask and ValueTask<T> are structs that let an async method return a result without heap-allocating a Task when it completes synchronously. The win is one fewer allocation on hot paths that usually finish without awaiting. The cost is a strict await-once contract. Here is what the type actually is, how it works, and the narrow set of cases where it earns its keep.
- What is Native AOT and what does it cost you?
Native AOT compiles your .NET app to a single self-contained native binary with no JIT, buying fast startup and a small memory footprint. The price is a C toolchain at build time, slower publishes, per-RID builds, no reflection or Reflection.Emit, mandatory trimming, and no Dynamic PGO. Here is the full ledger.
- AsNoTracking vs AsNoTrackingWithIdentityResolution in EF Core 11: which should you use?
Use AsNoTracking for read-only queries by default. Reach for AsNoTrackingWithIdentityResolution only when the result graph contains the same entity more than once and your code depends on getting a single shared instance back.
- HybridCache vs IMemoryCache vs IDistributedCache in .NET 11: which should you pick?
Default to HybridCache for new caching code in .NET 11. Reach for IMemoryCache only when you need raw single-server speed with no serialization, and IDistributedCache only as a backing store. Here is the decision matrix.
- LINQ Gets FullJoin and Selector-Free Joins in .NET 11 Preview 5
.NET 11 Preview 5 adds a brand-new FullJoin operator to LINQ plus tuple-returning overloads for Join, LeftJoin, RightJoin, and GroupJoin that drop the result selector entirely.
- How to use HybridCache in ASP.NET Core 11 with Redis as the L2 cache
Wire HybridCache to a Redis L2 in ASP.NET Core 11: register the service, add the StackExchange Redis distributed cache, and let GetOrCreateAsync give you a two-tier cache with built-in stampede protection and tag invalidation.
- Migrate from ValueTask<T> back to Task<T>: when and why (.NET 11, C# 14)
A practical checklist for reverting ValueTask and ValueTask<T> return types to Task and Task<T>, what breaks at the call sites, how to verify each change, and how to know whether the swap was ever worth it.
- EF Core ExecuteUpdate vs loading entities and SaveChanges: which should you use?
A decision guide and real benchmark for EF Core 11: use ExecuteUpdate for set-based writes by a predicate, and the load-then-SaveChanges path only when you need the change tracker, interceptors, or a complex object graph.
- .NET 11 Raises the Minimum CPU Baseline to x86-64-v2
.NET 11 Preview 4 drops support for pre-2013 x86/x64 chips and bumps the JIT baseline to x86-64-v2. Here is what breaks, why, and how to check your hardware before you upgrade.
- .NET 11 Can Round-Trip a Double as Hex, Bit for Bit
.NET 11 Preview 4 teaches double, float, and Half to format with the X specifier and parse with NumberStyles.HexFloat, producing the same IEEE-754 hex text as C printf("%a").
- How to use query splitting to avoid a cartesian explosion in EF Core 11
When you Include two sibling collections, EF Core 11 returns the cross product and your row count explodes. Here is how AsSplitQuery fixes it, how to turn it on globally, and the consistency and ordering gotchas to watch for.
2026 / 05
- How to use ExecuteUpdate and ExecuteDelete for bulk writes in EF Core 11
A complete guide to ExecuteUpdate and ExecuteDelete in EF Core 11: the SQL they emit, the change-tracker gotcha that silently overwrites your bulk write, transactions, concurrency control with the affected-row count, and the EF Core 10 delegate setters that let you build conditional updates with plain if statements.
- List<T> vs Span<T> vs ReadOnlySpan<T> in C#: when to reach for which
List<T> is a growable heap collection; Span<T> and ReadOnlySpan<T> are stack-only views over memory you already own. Use List<T> for anything you store, return from async, or grow; Span<T> for a mutable allocation-free view in a synchronous method; ReadOnlySpan<T> for read-only parsing over strings, u8 literals, and slices.
- Parallel.ForEach vs Parallel.ForEachAsync vs Task.WhenAll in C#
Use Parallel.ForEach for CPU-bound work over in-memory data, Parallel.ForEachAsync for async I/O over many items with a concurrency cap, and Task.WhenAll for a small fixed fan-out where you want every operation in flight and need the results back.
- StringBuilder vs string interpolation in .NET 11: which should you use?
Use string interpolation for one-shot composition of a fixed set of values; use StringBuilder when you append in a loop or across an unknown number of pieces. The dividing line is the loop, not the number of values.
- .NET 11 Adds Allocation-Free Deflate and GZip Compression
.NET 11 Preview 4 ships DeflateEncoder, GZipEncoder, and ZLibEncoder plus matching decoders so you can compress straight into a Span<byte> with OperationStatus, no Stream required.
- EF Core compiled queries vs raw SQL vs Dapper: which read path wins?
For read-heavy paths in .NET 11, plain EF Core with AsNoTracking is within ~5% of Dapper. Reach for compiled queries on a profiled single-row hot path, and Dapper only for the lowest latency or SQL LINQ can't express.
- Native AOT vs ReadyToRun vs JIT in .NET 11: which should you ship?
Plain JIT with Dynamic PGO wins steady-state throughput, ReadyToRun cuts startup with zero code changes, and Native AOT gives the smallest, fastest-starting binary at the cost of reflection and dynamic code. Pick by deployment shape, not raw benchmarks.
- Fix: PlatformNotSupportedException: Operation is not supported on this platform in Native AOT
Native AOT strips the JIT and the interpreter, so reflection emit, expression-tree compilation, and unseen MakeGenericType throw at runtime. Find the call via IL3050 and replace it with a source generator or a pre-baked path.
- Copilot Studio's .NET 10 WebAssembly upgrade: 20% cold path, 5% warm
Microsoft moved Copilot Studio's WASM engine from .NET 8 to .NET 10. The dual JIT/AOT package, fingerprinting, and WasmStripILAfterAOT explain the numbers.
- How to profile jank in a Flutter app with DevTools
Step-by-step guide to finding and fixing jank in Flutter 3.27 with DevTools: profile mode, the Performance overlay, the Frame Analysis tab, the CPU Profiler, raster vs UI thread, shader warm-up, and Impeller-specific gotchas. Tested on Flutter 3.27.1, Dart 3.11, DevTools 2.40.
- How to write a Dart isolate for CPU-bound work
When async/await is not enough: spawn a Dart isolate to run CPU-bound work off the UI thread. Isolate.run, Flutter's compute, long-lived workers with SendPort/ReceivePort, what can cross the boundary, and the JS/web caveat. Tested on Dart 3.11 and Flutter 3.27.1.
- How to convert T[] to ReadOnlyMemory<T> in C# (implicit operator and explicit constructor)
Three ways to wrap a T[] in a ReadOnlyMemory<T> in .NET 11: the implicit conversion, the explicit constructor, and AsMemory(). When each is the right call.
- How to detect N+1 queries in EF Core 11
A practical guide to spotting N+1 queries in EF Core 11: what the pattern looks like in real code, how to surface it via logging, diagnostic interceptors, OpenTelemetry, and a test that fails the build when a hot path regresses.
- How to use compiled queries with EF Core for hot paths
A practical guide to EF Core 11 compiled queries: when EF.CompileAsyncQuery actually wins, the static-field pattern, the Include and tracking gotchas, and how to benchmark before and after so you can prove it was worth the extra ceremony.
2026 / 04
- How to use SearchValues<T> correctly in .NET 11
SearchValues<T> beats IndexOfAny by 5x to 250x but only when you use it the way the runtime expects. The cache-as-static rule, the StringComparison gotcha, when not to bother, and the IndexOfAnyExcept inversion trick that nobody documents.
- How to reduce cold-start time for a .NET 11 AWS Lambda
A practical, version-specific playbook for cutting .NET 11 Lambda cold starts. Covers Native AOT on provided.al2023, ReadyToRun, SnapStart on the managed dotnet10 runtime, memory tuning, static reuse, trim safety, and how to actually read INIT_DURATION.
- How to use Native AOT with ASP.NET Core minimal APIs
A complete .NET 11 walkthrough for shipping an ASP.NET Core minimal API with Native AOT: PublishAot, CreateSlimBuilder, source-generated JSON, the AddControllers limitation, IL2026 / IL3050 warnings, and EnableRequestDelegateGenerator for library projects.
- How to warm up EF Core's model before the first query
EF Core builds its conceptual model lazily on the first DbContext access, which is why the first query in a fresh process is several hundred milliseconds slower than every query after it. This guide covers the three real fixes in EF Core 11: a startup IHostedService that touches Model and opens a connection, dotnet ef dbcontext optimize to ship a precompiled model, and the cache-key footguns that silently rebuild the model anyway.
- How to profile a .NET app with dotnet-trace and read the output
A complete guide to profiling .NET 11 apps with dotnet-trace: install, pick the right profile, capture from startup, and read the .nettrace output in PerfView, Visual Studio, Speedscope, or Perfetto.
- .NET 10 on Ubuntu 26.04: resolute Container Tags and Native AOT in the Archive
Ubuntu 26.04 Resolute Raccoon ships with .NET 10 in the archive, introduces -resolute container tags to replace -noble, and packages Native AOT tooling via dotnet-sdk-aot-10.0.
- How to read a large CSV in .NET 11 without running out of memory
Stream a multi-gigabyte CSV in .NET 11 without OutOfMemoryException. File.ReadLines, CsvHelper, Sylvan, and Pipelines compared with code and measurements.
- How to stream a file from an ASP.NET Core endpoint without buffering
Serve large files from ASP.NET Core 11 without loading them into memory. Three tiers: PhysicalFileResult for on-disk files, Results.Stream for arbitrary streams, and Response.BodyWriter for generated payloads -- with code for each.
- Node.js Addons in C#: .NET Native AOT Replaces C++ and node-gyp
The C# Dev Kit team swapped its C++ Node.js addon for a .NET 10 Native AOT library, using N-API, UnmanagedCallersOnly, and LibraryImport to produce a single .node file without Python or node-gyp.
- Kestrel starts processing HTTP/3 requests before the SETTINGS frame in .NET 11 Preview 3
.NET 11 Preview 3 lets Kestrel serve HTTP/3 requests before the peer's control stream and SETTINGS frame arrive, shaving handshake latency off the first request on every new QUIC connection.
- RyuJIT trims more bounds checks in .NET 11 Preview 3: index-from-end and i + constant
.NET 11 Preview 3 teaches RyuJIT to eliminate redundant bounds checks on consecutive index-from-end access and on i + constant < length patterns, cutting branch pressure in tight loops.
- EF Core 11 Prunes Unnecessary Reference Joins in Split Queries
EF Core 11 Preview 3 removes redundant to-one joins from split queries and drops unneeded ORDER BY keys. One reported scenario got 29% faster, another 22%. Here is what the SQL now looks like.
- EF Core 11 Adds GetEntriesForState to Skip DetectChanges
EF Core 11 Preview 3 introduces ChangeTracker.GetEntriesForState, a state-filtered enumerator that avoids an extra DetectChanges pass in hot paths like SaveChanges interceptors and audit hooks.
- Building a Microsecond-Latency Database Engine in C#
Loic Baumann's Typhon project targets 1-2 microsecond ACID commits using ref structs, hardware intrinsics, and pinned memory, proving C# can compete at the systems programming level.
- C# 14 user-defined compound assignment operators: in-place += without the extra allocation
C# 14 lets you overload +=, -=, *=, and friends as void instance methods that mutate the receiver in place, cutting allocations for large value holders like BigInteger-style buffers and tensors.
- How Dapper's Default nvarchar Parameters Silently Kill Your SQL Server Indexes
C# strings sent through Dapper default to nvarchar(4000), forcing SQL Server into implicit conversions and full index scans. Here's how to fix it with DbType.AnsiString.
- .NET 11 Adds Native Zstandard Compression to System.IO.Compression
.NET 11 Preview 1 ships ZstandardStream, ZstandardEncoder, and ZstandardDecoder in System.IO.Compression, giving you fast, inbox zstd support with no third-party packages.
- Rider 2026.1 Ships an ASM Viewer for JIT, ReadyToRun, and NativeAOT Output
Rider 2026.1 adds a .NET Disassembler plugin that lets you inspect machine code generated by the JIT, ReadyToRun, and NativeAOT compilers without leaving the IDE.
- Kestrel Drops Exceptions from Its HTTP/1.1 Parser in .NET 11
Kestrel's HTTP/1.1 request parser in .NET 11 replaces BadHttpRequestException with a result struct, cutting malformed-request overhead by up to 40%.
- .NET 11 Runtime Async Replaces State Machines with Cleaner Stack Traces
Runtime Async in .NET 11 moves async/await handling from compiler-generated state machines into the runtime itself, producing readable stack traces, correct breakpoints, and fewer heap allocations.
2026 / 02
- Polars.NET: a Rust DataFrame engine for .NET 10 that leans on LibraryImport
A new Polars.NET project is trending after a Feb 6, 2026 community post. The headline is simple: a .NET-friendly DataFrame API backed by Rust Polars, with a stable C ABI and LibraryImport-based interop to keep overhead low.
2026 / 01
- Perfetto + dotnet-trace: a practical profiling loop for .NET 9/.NET 10
A practical profiling loop for .NET 9 and .NET 10: capture traces with dotnet-trace, visualize them in Perfetto, and iterate on CPU, GC, and thread pool issues.
2025 / 04
- .NET 10: Array Enumeration Performance Improvements (JIT Array De-Abstraction)
In .NET 10, the JIT compiler reduces the overhead of iterating arrays through interfaces. See benchmarks comparing .NET 9 vs .NET 10 with foreach, IEnumerable, and conditional escape analysis.
2025 / 01
- .NET Performance: ToList vs ToArray
.NET 9 significantly improves ToArray performance using InlineArray, making it faster and more memory-efficient than ToList. See benchmarks comparing .NET 8 vs .NET 9.