It's a fairly heavyweight option yes; but I'm not sure how much time you can really save when in any case you'd still have to open the file and read it, since that's the slowest step; and how many files it would take reading at once for that difference to matter from a practical standpoint.

I'd bet the i/o is the bottleneck and unless Windows is reading the entire file first and another method could get it from the headers, there's not going to be a significant difference until files at once is into the 5 digits.

(The method from my post is also what Windows uses when you open a folder of MP3s in Explorer and the Duration column is used; so if that's not too slow, my code won't be either. Making the IPropertyDescription module level that's only done once would improve performance too.).