<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/measuring-ui-responsiveness-in-resharper-kqpffwvyr" -->

---
title: Measuring UI responsiveness in Resharper | daily.dev
description: A JetBrains engineer describes building a custom .NET profiler and WPF overlay to measure ReSharper's UI responsiveness in Visual Studio. The piece walks...
canonical: https://daily.dev/posts/measuring-ui-responsiveness-in-resharper-kqpffwvyr
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Measuring UI responsiveness in Resharper | daily.dev
og:description: A JetBrains engineer describes building a custom .NET profiler and WPF overlay to measure ReSharper's UI responsiveness in Visual Studio. The piece walks...
og:url: https://daily.dev/posts/measuring-ui-responsiveness-in-resharper-kqpffwvyr
og:image: https://api.daily.dev/og/posts/kQpfFWvYr.png
og:image:alt: Measuring UI responsiveness in Resharper
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Measuring UI responsiveness in Resharper

**[Kevin Gosse \(minidump.net\)](https://daily.dev/sources/minidump)** · 11 min read · 0 upvotes · 0 comments

## Summary

A JetBrains engineer describes building a custom .NET profiler and WPF overlay to measure ReSharper's UI responsiveness in Visual Studio. The piece walks through failed approaches (ETW UIUnresponsiveness events, SendMessage, SetTimer) before landing on a SetWindowsHookEx-based solution combined with synthetic mouse input via SendInput to continuously detect UI freezes down to 20ms. It also covers building the overlay with WPF, including finding the Visual Studio window, using WS_EX_TRANSPARENT to pass through clicks, and handling DPI scaling. The profiler itself was built using the author's Silhouette library for writing .NET profilers in C# with NativeAOT. Full source is available on GitHub.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://minidump.net/measuring-ui-responsiveness>

## Questions this post answers

### Why does using SendMessage to measure Windows UI thread responsiveness give misleading results?

SendMessage is processed with the highest priority in the Windows message queue, so a constant stream of SendMessage calls gets handled immediately even while low-priority input messages pile up unprocessed at the end of the queue. This makes the UI thread appear responsive in measurements while it is actually failing to respond to real user input.

_Developers debugging UI freeze detection logic can find deep technical writeups like this through daily.dev._

### How can I detect Windows UI thread freezes faster than the built-in 250ms threshold?

Instead of relying on the Win32k ETW UIUnresponsiveness event, which uses a fixed, non-configurable threshold of roughly 250ms and only fires after the freeze ends, use SetWindowsHookEx with a WH_MOUSE hook combined with a synthetic SendInput loop every 10ms to continuously track when input messages are dequeued, detecting unresponsiveness in as little as 20ms.

_Engineers tuning real-time responsiveness monitoring can track techniques like this via daily.dev._

### How do you make a WPF overlay window click-through so it doesn't block input to the window underneath?

Set the WS_EX_TRANSPARENT extended window style via interop, since WPF has no built-in API for it. After the window is initialized, retrieve its handle with WindowInteropHelper, get the current extended style with GetWindowLong, OR in WS_EX_TRANSPARENT, and apply it with SetWindowLong so clicks pass through to the window beneath.

_Developers building transparent overlay tools on WPF can pick up interop patterns like this on daily.dev._

## Similar posts on daily.dev

- [Today I will… find hidden latency across a distributed .NET application](https://daily.dev/posts/today-i-will-find-hidden-latency-across-a-distributed-net-application-37hqr8by1) · Visual Studio Blog · 8 upvotes · 0 comments

---

Tags: [#performance](https://daily.dev/tags/performance), [#.net](https://daily.dev/tags/.net)

[View this post on daily.dev](https://daily.dev/posts/measuring-ui-responsiveness-in-resharper-kqpffwvyr)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Measuring UI responsiveness in Resharper","url":"https://daily.dev/posts/measuring-ui-responsiveness-in-resharper-kqpffwvyr","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/measuring-ui-responsiveness-in-resharper-kqpffwvyr"},"datePublished":"2026-10-04T13:05:22.883Z","dateModified":"2026-10-04T13:11:40.457Z","description":"A JetBrains engineer describes building a custom .NET profiler and WPF overlay to measure ReSharper's UI responsiveness in Visual Studio. The piece walks...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/ef20145f112a60cc66f0ebb11053887c?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/ef20145f112a60cc66f0ebb11053887c?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Kevin Gosse (minidump.net)","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Kevin Gosse (minidump.net)","logo":"https://media.daily.dev/image/upload/s--8KHn1aFB--/f_auto,q_auto/v1791119046/logos/minidump?_a=BAMAMicg0","url":"https://daily.dev/sources/minidump"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/measuring-ui-responsiveness-in-resharper-kqpffwvyr","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"performance,.net","timeRequired":"PT11M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Kevin Gosse (minidump.net)","item":"https://daily.dev/sources/minidump"},{"@type":"ListItem","position":3,"name":"Measuring UI responsiveness in Resharper"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/measuring-ui-responsiveness-in-resharper-kqpffwvyr#faq","mainEntity":[{"@type":"Question","name":"Why does using SendMessage to measure Windows UI thread responsiveness give misleading results?","acceptedAnswer":{"@type":"Answer","text":"SendMessage is processed with the highest priority in the Windows message queue, so a constant stream of SendMessage calls gets handled immediately even while low-priority input messages pile up unprocessed at the end of the queue. This makes the UI thread appear responsive in measurements while it is actually failing to respond to real user input. Developers debugging UI freeze detection logic can find deep technical writeups like this through daily.dev."}},{"@type":"Question","name":"How can I detect Windows UI thread freezes faster than the built-in 250ms threshold?","acceptedAnswer":{"@type":"Answer","text":"Instead of relying on the Win32k ETW UIUnresponsiveness event, which uses a fixed, non-configurable threshold of roughly 250ms and only fires after the freeze ends, use SetWindowsHookEx with a WH_MOUSE hook combined with a synthetic SendInput loop every 10ms to continuously track when input messages are dequeued, detecting unresponsiveness in as little as 20ms. Engineers tuning real-time responsiveness monitoring can track techniques like this via daily.dev."}},{"@type":"Question","name":"How do you make a WPF overlay window click-through so it doesn't block input to the window underneath?","acceptedAnswer":{"@type":"Answer","text":"Set the WS_EX_TRANSPARENT extended window style via interop, since WPF has no built-in API for it. After the window is initialized, retrieve its handle with WindowInteropHelper, get the current extended style with GetWindowLong, OR in WS_EX_TRANSPARENT, and apply it with SetWindowLong so clicks pass through to the window beneath. Developers building transparent overlay tools on WPF can pick up interop patterns like this on daily.dev."}}]}
```

