When you execute the xp_cmdshell basically the following things happen:
- check if the option is enabled
- few other security checks
- account information is gathered depending who calls the procedure
- a new OS shell session is created with the account information and the environment is loaded
- Command is executed
- Output is gathered (unless no_output is used)
- Shell session is closed and the output is shown
Especially the initialization of the shell session can be really time consuming. The next time you make the call, basically everything is done again.
If this is managed code, without knowing any more about the dependencies of your executable, I would suggest that you move the functionality of the exe inside a dll and create a small exe that uses (basically calls) this dll. After that, you can register this dll inside the SQL Server and create a clr stored procedure to call the functionality of the dll from T-SQL.
For more info about CLR stored procedures:
http://msdn.microsoft.com/en-us/library/ms131094.aspx[
^]