Ver Mensaje Individual
  #1 (permalink)  
Antiguo 17/09/2010, 02:12
Juanster
 
Fecha de Ingreso: octubre-2004
Mensajes: 39
Antigüedad: 20 años, 3 meses
Puntos: 1
Consumo memoria

Hola, tengo una aplicación ASP.NET (Framework 3.5) con base de datos MySQL.

Es una aplicación grande que va llamando a procedimientos almacenados para ejecutar las consultas.

El problema es que consume muchísima memoria. Tengo otras aplicaciones en el servidor, un Windows Server 2008 con 4 GB de Ram (IIS7), pero el proceso:

mysqld-nt.exe 370.000 Kb
w3wp.exe 210.000 kb

He pueto un pool diferente para cada aplicación, así que ese es el de la aplicación en concreto.

Algo tiene que estar pasando, ya que la base de datos tiene un tamaño de 1Mb, la tabla más grande tiene 60.000 registros y no almaceno imágenes ni nada raro.

No sé si se me estará quedando algo pillado, es problema de los índices o que...pero el rendimiento deja frito el servidor cuando tengo 9 o 10 sitios web corriendo la aplicación.

Esta es la parte del código que conecta con la bbdd, por si alguien ve algo raro. En teoría se abre y se cierra la conexión por cada consulta, por lo que no debería quedarse pillada ninguna:

public void execute_NonQuery_procedure(string StoredProcedure, Hashtable hParams)
{
MySqlConnection oConnection = new MySqlConnection();

try
{
//***** Ontenemos la cadena de conexión *****//
string sConnection = ConfigurationSettings.AppSettings[DB];
oConnection = new MySqlConnection(sConnection);

//***** Creamos el comando *****//
MySqlCommand oCommand = new MySqlCommand(StoredProcedure, oConnection);
oCommand.CommandType = CommandType.StoredProcedure;

//***** Obtenemos los parámetros *****//
IDictionaryEnumerator en = hParams.GetEnumerator();
while (en.MoveNext())
{
oCommand.Parameters.AddWithValue(en.Key.ToString() , en.Value);
oCommand.Parameters[en.Key.ToString()].Direction = ParameterDirection.Input;
}

//***** Abrimos la conexión y ejecutamos *****//
oConnection.Open();
oCommand.ExecuteNonQuery();
}
catch (Exception e)
{
throw e;
}
finally
{
oConnection.Close();
}
}



public DataSet get_DataSet_procedure(string StoredProcedure, Hashtable hParams)
{
MySqlConnection oConnection = new MySqlConnection();

try
{
//***** Ontenemos la cadena de conexión *****//
string sConnection = ConfigurationSettings.AppSettings[DB];
oConnection = new MySqlConnection(sConnection);

//***** Creamos el comando *****//
MySqlCommand oCommand = new MySqlCommand(StoredProcedure, oConnection);
oCommand.CommandType = CommandType.StoredProcedure;

//***** Obtenemos los parámetros *****//
IDictionaryEnumerator en = hParams.GetEnumerator();
while (en.MoveNext())
{
oCommand.Parameters.AddWithValue(en.Key.ToString() , en.Value);
oCommand.Parameters[en.Key.ToString()].Direction = ParameterDirection.Input;
}

//***** Abrimos la conexión y ejecutamos *****//
oConnection.Open();

DataSet ds = new DataSet();
MySqlDataAdapter da = new MySqlDataAdapter(oCommand);

da.Fill(ds);
return ds;
}
catch (Exception e)
{
throw e;
}
finally
{
oConnection.Close();
}
}


GRACIAS