XInputGetState is much slower if you call it for a disconnected controller, what fun!
It's probably a famous gotcha that only the doc page doesn't know about.
Looks like internally it enumerates devices for every call (and when the controller is connected it doesn't need to do that).
So that lib went from "yo ezpz only a Get and a Set" to "but only call the Get once per second until something is connected because it's really expensive (maybe even do it in a thread)"
@jeremy.laumon.name I wonder if GameInput suffers from this too. Last time I tried GameInput, it had many other bugs, but colleagues tell me that Microsoft fixed many of them in recent releases.