Thanks all for you advice. I'll check the connection string and make sure it's pooling. I am pretty sure any SQL connection I am using uses the connection string from the web.config file. I am also pretty sure all my SQL reads (which use SQL Reader) wrap everything in using statements.

Q: How could excessively orphaned SQL connections leave the CPU maxed?

Also, the XAF Framework is built on top of the DevExpress ORM they call XPO, which in turn uses their own ObjectSpace and UnitOfWork objects to wrap connections. I do often create new ObjectSpace instances, but that's only because every single view needs it's own ObjectSpace. That is, when you want to create a view, you have to define a ViewController and when the controller is activated you create a ObjectSpace then call myNewObjectSpace.SetView(ClientDetailView) and then just forget about the ObjectSpace (i assume the thing that maintains the view controllers also maintains the ObjectSpaces I create).

Harlequin: Thanks. I'll look into the ANTS Profiler.