Nope. Not normal. So...
How are the measures being done? I'd suggest doing the measures on the server using extended events (or, if this is really 2008, trace events). This way you get a consistent measure, regardless of where the call is coming from. Start there. If you still see that the same procedure called from SSMS or from your app has a four times difference in execution time, as measured on the server, then, we need to capture the execution plans. This will tell us how the query is being resolved by the optimizer. It's possible that due to things like differences in ANSI settings on the connection, recompiles, or something else, that you're getting different plans from the app and SSMS. If, on the other hand, the performance measured on the server is the same, the issue is much more likely to be in the code in Visual Studio and not the code in SQL Server.