Pregunta

Actualmente mido el tiempo dedicado a cargar una página web desde un programa C#.

La solución de Visual Studio tiene un programa de consola y un sitio web de ASP.NET con solo una página. El sitio web está alojado en ASP.NET Development Server. La aplicación de la consola consulta la página web como esta:

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();

La página web no tiene nada especial, solo una respuesta en la carga y sin código ASP.NET:

protected void Page_Load(object sender, EventArgs e)
{
    Response.Write("Hello World");
}

Ahora, el cronómetro muestra cada vez que el código gastaba 0 ms. Para hacer todo el trabajo (consultar el servidor, obtener la respuesta, etc.).

¿Como es posible? ¿No hay algo malo con lo que estoy haciendo? Realmente, esperaba al menos 10-20 ms. Para ejecutar todo el código del lado del cliente, luego 100 ms. a:

  • Lado del cliente] Encuentre la página para consultar desde URI (que no requiere consulta DNS, por lo que es bastante rápido),
  • lado del cliente] hacer la solicitud,
  • Lado del servidor] Inicializar el motor ASP.NET,
  • Lado del servidor] procesa la solicitud,
  • Lado del servidor] Buscar y leer el archivo .px y ejecutar el código compilado (al menos el archivo de lectura puede costar varios MS.),
  • Lado del servidor] Respuesta de compilación, incluidos los encabezados, luego envíela,
  • Lado del cliente] Reciba la respuesta y procesa (recorte).

Entonces, ¿por qué es tan extremadamente rápido? ¿Hay un caché complicado que simplemente saltea todos/la mayoría de los pasos y devuelva el "Hello World" al cliente?

Si hay un caché "oculto", ¿dónde está y cómo puedo deshabilitarlo para medir el tiempo "real" dedicado?

¿Fue útil?

Solución

¡Sí, esto puede y debe ser 0 ms! Porque su servidor está en un localhost. Intente obtener el servidor ASP.NET en otro lugar en una red mundial.

Y no resuelve localhost porque esta es una dirección constante para 127.0.0.1. Y la comunicación a esta dirección es operada solo por el kernel de su sistema operativo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top