I've got a page that couldn't be more simple:
<%@ Page Trace="true" %>
<html>
<head></head>
<body>
<h1>Hello World</h1>
<a href="/OtherPage.aspx"/>Other Page</a>
<p><%=DateTime.Now.ToString()%>
</body>
</html>
... but it takes forever to load. There is no database or web service call to slow it down. The trace command reveals that the time from Begin PreInot to End Render is .000049 seconds, but the page itself takes several seconds to load. It is a new web site I just created for this test, and just has a web.config & two test files. The only thing in the web.config is access control:
<authorization><allow users="domain\me" /><deny users = "*"/></authorization>
What else could IIS be doing with all of that time?
Time to turn on Failed IIS Request Tracing!
I realise that the request is actually not failing, but you should be able to set Status 200 on the trace to track successful requests as well. There is a tutorial on iis.net that tells you to use failed request tracing for tracing successful requests, so I assume it should work.
Just a quick note what happend in my case:
Neither Process Monitor nor Failed Request Tracing was of any help. The website simply loaded (nearly) forever.
Finally, after waiting for several minutes an error occurred stating that it "cannot locate the network path".
The reason was that I entered a connection string to a non-existing SQL Server instance, so it somehow keept searching for the server. Finally, a timeout occured.
The solution was to simply specify the correct SQL Server in the connection string inside Web.Config.
I had similar problems with unusable applications on IIS on production environment. A single web application with one app pool was running extremely slow.
I just set the property "Enable 32-bit applications" flag to true in the advanced settings of my app pools and now I can run 3 web applications with 3 distinct app pools.
More detailed instructions here: http://forums.iis.net/t/1189907.aspx/1
Time to roll-out MS SysInternals Process Monitor. Get it running, turn on "drop filtered events", then setup a filter "process name is w3wp.exe" and monitor away. Also, drag the Duration column over to the left, so its easier to see.
I have seen IIS 7.5 have "issues" with 32-bit ASP.NET code, but your test page is so minimal, I can't believe it would cause an issue, even if it were using 32-bit .NET.