How much faster the second will really depend on too many things. Network overhead can be small compared to the size of your result sets.
There is another alternative (which should be faster than depending on the behavior of the lock), that is, call everything asynchronously - then your page can effectively end when the longest is completed. Obviously, this will require some additional coding.
In this example, there is only one SP overhead. Suppose that SP returns either a single rowset that the client will split / process or multiple rowset:
int[] ids;
In this example, the SP call overhead has n times one call. and calls are serialized:
foreach(item in mylist) { CallSQLStoredProc(item.id); }
In the third alternative:
foreach(item in mylist) { StartSQLStoredProc(item.id); }
It still has the overhead of n DB, but the performance improvement may depend on the capacity of SQL Server and the network to parallelize the workload. In addition, you get the opportunity to start SQL Server, which works during page creation.
The only SP solution can still win, especially if it can put together a single result set with UNION, where SQL Server can parallelize the task. However, if there are separate schemas in the result sets or UNION may not work well, an asynchronous solution with several SPs can beat it (and also take the opportunity to do other work on the page).
source share