That article describes a way to speed up the unmanaged version, however, it is already 6 times faster than Icon.ExtractAssociatedIcon(filename); - and that's what I was wondering about.
My code is pretty simple, it just loops Icon.ExtractAssociatedIcon(filename); over an array of file names, and same for SHGetFileInfo.
Btw, ExtractAssociatedIcon producing icons ~700 bytes big vs ~400 bytes produced by SHGetFileInfo.