我目前正在测量从 C# 程序加载网页所花费的时间。
Visual Studio 解决方案有一个控制台程序和一个只有一页的 ASP.NET 网站。该网站托管在 ASP.NET 开发服务器上。控制台应用程序像这样查询网页:
bool isSuccess;
Stopwatch timeSpentToDownloadPage = Stopwatch.StartNew();
WebRequest request = HttpWebRequest.Create(new Uri("http://localhost:12345/Test.aspx", UriKind.Absolute));
request.Timeout = 200;
using (WebResponse response = request.GetResponse())
{
Stream responseStream = response.GetResponseStream();
StreamReader sr = new StreamReader(responseStream);
string responseText = sr.ReadToEnd().Trim();
isSuccess = (responseText == "Hello World");
}
timeSpentToDownloadPage.Stop();
该网页没有什么特别之处,只是加载响应,没有 ASP.NET 代码:
protected void Page_Load(object sender, EventArgs e)
{
Response.Write("Hello World");
}
现在,秒表显示代码每次花费 0 毫秒。完成所有工作(查询服务器、获取响应等)。
这怎么可能?我在做的事情没有问题吗?真的,我预计至少需要 10-20 毫秒。执行所有客户端代码,然后是 100 毫秒。到:
- [客户端] 从uri中找到要查询的页面(不需要DNS查询,所以很快),
- [客户端]做请求,
- [服务器端] 初始化 ASP.NET 引擎,
- [服务器端] 处理请求,
- [服务器端] 查找并读取.aspx文件并执行编译后的代码(至少读取文件可能会花费几个毫秒),
- [服务器端] 构建响应,包括标头,然后发送它,
- [客户端] 接收响应并处理它(修剪)。
那么为什么它如此之快呢?是否有一个棘手的缓存只是跳过所有/大部分步骤并将“Hello World”返回给客户端?
如果有一个“隐藏”缓存,它在哪里,我如何禁用它来衡量所花费的“真实”时间?