I used SubSonic extensively in several decent sized complex projects; it performed well (with some minor exceptions such as a Memory Leak in Loading collections which we fixed). What i didn't like about SubSonic was the version upgrade nightmare. We went through many of these and its was a huge issue, different versions had backward compatibility issues and the code generation tools (SubCommander.exe) had to match the appropriate version or you would be in trouble.
We had 5 developers working on the same project which brought many of these issues to light. Recently I've moved on to Linq-to-Sql and have been extremely happy with it. We gave the ADO.NET Entity Framework a try but it's total lack of support for stored procedures, lazy loading, and the fact that the designer refused to show up after you had used it for the first time proved that the ADO.NET Entity Framework is severely flawed, we ended up signing the Alt.NET "vote of no confidence".
So at this point in time Linq-to-Sql is by far the winner in the competition but we shall see how it performs in the long-run