A retrieval proc is called by passing a SqlCommand to the SqlDataAdapter.Fill() method to fill a datatable/set.
so what's sent to the db is the proc name, the parameters and some execution fluff around it, e.g. EXEC ... which is done by the SqlClient, we just pass the proc name and the parameters.
Could you check with a profiler what the db receives (which is out of our hands btw, it's produced by sqlclient.SqlDataAdapter, which calls internally SqlCommand.ExecuteCommand) and whats eating the CPU cycles?
1.0.2004.2 does use .net 1.1, perhaps some bug in .net 1.1 causes this?