Pregunta

Esta pregunta es un seguimiento de un anterior pregunta .

He escrito un programa simple que se parece a esto.

string s;
do
{
  using (SqlConnection conn = new SqlConnection("POOLEDCONN"))
  {
    using (SqlCommand cmd = new SqlCommand("", conn))
    {
        s = (string) cmd.ExecuteScalar();
        Code2IncrementPerfomanceCounter
    }
  }    
} while (!string.IsNullOrEmpty(s))

La consulta devuelve una cadena (nvarchar (max), el tamaño máximo actual 9k), hay una gran cantidad de latencia entre SQL Server y .NET. El Analizador de SQL dice que la consulta tiene una duración de 0 ms, así que creo que no es la base de datos. La red está respondiendo en menos de 1 ms por lo que no debe ser la red.

Si ejecuta este código en nuestra testserver (VMWare, SQL no se virtualiza) habrá un máximo de 600 bucles por segundo. La aplicación no consume más del 5% de la CPU. ¿Por qué no se va ¿Más rápido? ¿Debo usar el streaming para obtener los datos de SQL o algo más?

Gracias de antemano

¿Fue útil?

Solución

600 llamadas por segundo es una llamada por 1,7 ms. Si su latencia es de 1 ms, y SQL Server agrega un poco de eso, que parece como un resultado creíble?

Otros consejos

Tengo tres cosas diferentes que hay que buscar en:

  1. es el servidor Web se conecta al servidor DB con el protocolo TCP / IP o está usando un protocolo diferente?
  2. ¿Cómo está ocupado la red en la máquina que ejecuta el proceso de dtoNet?
  3. ¿El rendimiento de ir por encima de 600 procesos / segundo si se quita la llamada SQL y dejar sólo el registro de contador de rendimiento?

Abrir y cerrar la conexión de SQL es caro. Puede que acaba de hacer esto una vez en su lugar?

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