1) You absolutely need threads, at least one separate thread per search. By if you have many cores or CPUs and not too many clients working in parallel, splitting a single search into sub-directories for more parallelism will improve final response time.
2) Not getting better, apparently. You CPU time is divided into more tasks. See the above item. One big warning: do not make the number of your threads growing proportionally to the number of user sessions. Make number of thread limited and predictable, otherwise too many thread will blow you server :-). Use thread pool if the number of threads is variable. In fact, you can even keep fixed number of threads, too. If some threads are not busy, they may stay at the blocking call to, say,
EventWaitHandle
and wait for next task.
3) Probably, but it depends. It depends on what you're doing. If the request is not very quick but response takes time (a typical case for search), you may easily go away with just a POST from a normal form.
4) See item (1). Also, I have a
big warning about
Directory.GetFiles
: see
Directory.Get.Files search pattern problem[
^], the discussion and work-around. Do it thoroughly.
[EDIT] Please see my other Answer.
Good luck.
—SA