Skip to content

LocalIP (Windows): uses GetUnicastIpAddressTable instead of GetAdaptersAddresses - #2614

Closed
4RH1T3CT0R7 wants to merge 1 commit into
fastfetch-cli:devfrom
4RH1T3CT0R7:perf/localip-windows-mib
Closed

4RH1T3CT0R7 wants to merge 1 commit into
fastfetch-cli:devfrom
4RH1T3CT0R7:perf/localip-windows-mib

Conversation

@4RH1T3CT0R7

@4RH1T3CT0R7 4RH1T3CT0R7 commented Sep 25, 2026 •

Copy link
Copy Markdown

on Windows, LocalIP spends most of its time in GetAdaptersAddresses(), which it calls twice (size probe, then fetch). here that's about 11 ms, the slowest module in the default config. this switches it to GetUnicastIpAddressTable() and GetIfEntry2(), the MIB APIs netif_windows.c already uses. GetAdaptersAddresses() is still called when showFlags is set, since only it has the flags

LocalIP with the default config went from 12.5 ms to 1.0 ms (--stat, median of 30), the whole run from 46 to 35 ms. text output is identical across 11 LocalIP configs; JSON entries now follow the address table order. the gain depends on the adapter count, this machine has 11 interfaces

…rsAddresses

GetAdaptersAddresses() was called twice (size probe, then the real call)
and costs about 11 ms on a machine with a few virtual adapters. The
addresses now come from GetUnicastIpAddressTable() and the per-interface
data from GetIfEntry2(), which is only called for interfaces that pass
the default route filter. GetAdaptersAddresses() is still used, with a
preallocated buffer, when showFlags is enabled.
@CarterLi CarterLi closed this in 7fdd1d8 Sep 26, 2026
@CarterLi

Copy link
Copy Markdown
Member

Applied in 7fdd1d8 and improved it more. Thanks.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants