Profile avatar
steplyakov.bsky.social
Software Engineer at MSFT. Opinions are my own.
46 posts 290 followers 44 following
Regular Contributor
Active Commenter

Hey #dotnet folks. Do you ever used (or needed) a debug version of a nuget package? The package has only the managed library, no native code, no executables. Is there a use case for that?

Hey #dotnet and other folks. Another quite exciting news: I've been mentoring colleges at MSFT for quite some time and now I'm available as a mentor at mentor.sh platform. Here is my profile: mentor.sh/mentors/Serg... Will be happy to be your mentor and learn from each other!

Hey #dotnet people:) Just published another episode on Dissecting the Code YouTube channel - "Can Tiered Compilation Cause Memory Leaks in .NET". This video is about a change in behavior between full framework on .net 9 in respect to GCInfo and how it affect memory usage.

Just added a rule to ErrorProne.NET to detect simple recursive calls. This may sound too simplistic, but I've seen such code being checked in by an accident. And I've faced StackOverflowException because of that in my tests before myself as well.

Ran into the situation again where updating VS broke incremental builds, because a different compiler version is now being stamped into the embedded PDB, invalidating all caches and resulting in different PE file bytes from identical sources. Glad I invested in the fancy PE parser and differ!

Hey #dotnet people:) Just published another episode on Dissecting the Code YouTube channel - "Dissecting Memory Leaks in .NET". How global events, hidden static collection and timers can cause memory leaks and the ways to avoid it. Link in the comment below.

Totally agree!

This article is spot on! Reinvent the Wheel: endler.dev/2025/reinven...

Hey #dotnet people! I've launched my YouTube channel: "Dissecting the Code". It's going to be very similar to my blog with a lot of deep dives into #dotnet, #csharp etc. I've already published the first two videos: ➡️ Episode 0: What You'll Learn Here ➡️ Episode 1: Dissecting Variable Lifetime

I don't tweet enough about how amazing the Ultra profiler is: github.com/xoofx/ultra

Just had a surprising MethodMissingException in tests without changing something (as far as I know, but 🤷). Found this post by @steplyakov.bsky.social which helped me understanding the issue. I haven't solved it yet in my code, but I will... Thanks! sergeyteplyakov.github.io/Blog/csharp/...

Do you know that CA2241 analyzer (for correct args to formatting methods) is very extensible? It supports: * built-in methods * StringSyntaxAttribute * Methods listed in .editorconfig Try to run it in your codebase, you might be surprised, how many violations do you have!

I just realized what causes me the most burnout at work. It's when management doesn't realize how much tech debt I'm paying off and how much I'm helping people and the ecosystem. All they see is that my tasks aren't progressing, so they start tightening the screws and micromanaging.

Ok, here is a thing. "We all know" that a managed instance can be collected during the method call. But do you know that an instance can be GCed **before** the instance method is called? This works in Release mode only due to the tracking the JIT does via GCInfo. #dotnet

Hot take: in some cases it is useful to profile an app in debug mode. Was helping in a performance analysis and it was not clear where the time is spent exactly. Re-ran profiler in debug build to see that it was a property getter that was used in a hot loop!

`dotnet run file.cs` is coming: Allows running C# source files with no need for an explicit backing project. We call these file-based programs (as opposed to project-based programs). github.com/dotnet/sdk/b...

I haven't written a blog post in a long time! Bridging the Gap: The Future of Aspire medium.com/@davidfowl/b...

Blogged: Finalizers are tricker than you might think. Part 2. sergeyteplyakov.github.io/Blog/2025/03... This is the second part of the series where I really trying to scare you of dealing with native resources. Let's see if I succeed :) #dotnet

Just FYI. If you need to check if a char is within a string, using 'str.IndexOf(c) != -1' is way more efficient than using 'str.Contains(c)' which is a call to 'Enumerable.Contains(string, c)'. Actually the IndexOf version is way more efficient! (the results for full framework)

New release of MSBuild Structured Log Viewer. New dark theme which should be much faster (don't laugh). Turns out the old dark theme we used (AdonisUI) messed with the tree view virtualization, so we saw significant slowdowns in tree layout.

I’m Ukrainian. So my position is clear.

I stand with Ukraine and the truth that Russia is an invader.

I stand with Ukraine and the truth that Russia is an invader.

Blogged: Finalizers are tricker than you might think, Part 1. The post is very close to a 5 Why type of postmortem we use internally for the incidents where I cover an investigation of crashes caused by NullReferenceExceptions from the finalizers. #dotnet

A bunch of awesome stuff is coming to .net10! One notable thing: lack of enumerator boxing allocations when iterating over an array via `IEnumerable<T>`. This is awesome! The link to github: github.com/dotnet/runti...