>I tested by simply creating and opening a connection in Application_Start.
Correct, the problem relies in the connection management and using it like that resolves the issue. In your case, you got more performance than me. But, the tests were different. In my test, it was the biggest hit which was doing a lot of SQL queries and writes.
Of course, doing the same under SQLClient would then be much faster as this one is designed and built in .NET. That one is also much more powerful. But, that would be a step later on. For now, we can have something running which does the job.