2

我目前正在测量从 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”返回给客户端?

如果有一个“隐藏”缓存,它在哪里,我如何禁用它来衡量所花费的“真实”时间?

4

1 回答 1

1

是的,这可以而且必须是 0 毫秒!因为您的服务器位于localhost. 尝试在全球网络中的其他地方获取 ASP.NET 服务器。

而且您不解析 localhost 因为这是127.0.0.1. 与此地址的通信仅由您的操作系统内核操作。

于 2010-06-04T11:10:23.733 回答