https://bugs.winehq.org/show_bug.cgi?id=26803
--- Comment #12 from Lauri Kenttä lauri.kentta@gmail.com --- I had a closer look at this.
FILEDLG95_FILENAME_FillFromSelection is somewhat poorly implemented, it loops the files twice, calls GlobalLock many times etc. Still, fixing this function improves speed only by 30% for 250 files (depends on the number of files).
Commenting out SetWindowTextW in FILEDLG95_FILENAME_FillFromSelection makes the selection a lot faster, but clearly this is not a valid solution.
The real problem seems to be that the list is updated for each selected file, even if multiple files are selected at once (try shift+end, for example). These calls come from line 1443 in shell32/shlview.c (LVN_ITEMCHANGED, OnStateChange).
There should be some way to defer FILEDLG95_FILENAME_FillFromSelection (or at least SetWindowTextW) until all the files have been selected.