Buenas, me he encontrado con un problema que me tiene intrigado, a ver si me podéis ayudar.
Tengo una aplicación que al arrancar está tardando un tiempo excesivo y me he dado cuenta de que todo es culpa de un único método que se encarga de cargar la configuración de la aplicación. Lo primero que pensé es que la consulta en base de datos tardaba demasiado (aunque no debería), pero tras investigar un poco he visto que en lo que pierde todo el tiempo es en acceder desde .net a la funcion que se encarga de realizar la consulta.
Pongo el trozo de código que he utilizado para investigar esto:
Console.WriteLine("Antes de consulta configuración " + DateTime.Now.ToLongTimeString());
DataTable dtConfig = Conexion.SelectConfig(select);
Console.WriteLine("Consulta configuración hecha" + DateTime.Now.ToLongTimeString());
public static DataTable SelectConfig(string strSQL)
{
try
{
Console.WriteLine("Dentro de consulta " + DateTime.Now.ToLongTimeString());
DataSet dsResult = new DataSet();
DbCommand dbCommand = dbConfig.GetSqlStringCommand(strSQL);
// Retrieve the initial data
dbConfig.LoadDataSet(dbCommand, dsResult, "Tabla");
return dsResult.Tables[0];
}
catch (Exception ex)
{
Program.logger.Error(ex.Message);
Program.logger.Error(strSQL);
return null;
}
}
Los tiempos que veo en la ventana "Output" son los siguientes:
Antes de consulta configuración 13:09:03
'PROYECTO.exe' (Managed): Loaded 'C:\WINDOWS\assembly\GAC_MSIL\mscorlib.resources\2.0.0.0_es_b77a5c561934e089\mscorlib.resources.dll', No symbols loaded.
Dentro de consulta 13:09:19
'PROYECTO.exe' (Managed): Loaded 'C:\PROYECTO\bin\Debug\Microsoft.Practices.EnterpriseLibrary.Data.dll', No symbols loaded.
'PROYECTO.exe' (Managed): Loaded 'C:\PROYECTO\bin\Debug\Microsoft.Practices.EnterpriseLibrary.Common.dll', No symbols loaded.
'PROYECTO.exe' (Managed): Loaded 'C:\WINDOWS\assembly\GAC_MSIL\System.Management\2.0.0.0__b03f5f7f11d50a3a\System.Management.dll', No symbols loaded.
'PROYECTO.exe' (Managed): Loaded 'C:\WINDOWS\assembly\GAC_32\System.Transactions\2.0.0.0__b77a5c561934e089\System.Transactions.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'PROYECTO.exe' (Managed): Loaded 'C:\WINDOWS\assembly\GAC_32\System.EnterpriseServices\2.0.0.0__b03f5f7f11d50a3a\System.EnterpriseServices.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
'PROYECTO.exe' (Managed): Loaded 'C:\WINDOWS\assembly\GAC_32\System.EnterpriseServices\2.0.0.0__b03f5f7f11d50a3a\System.EnterpriseServices.Wrapper.dll', Skipped loading symbols. Module is optimized and the debugger option 'Just My Code' is enabled.
Consulta configuración hecha13:09:19
Como se puede ver, tarda 16 segundos (desde las 13:09:03 hasta las 13:09:19) en entrar al método "SelectConfig" y por medio unicamente carga una dll. El método SelectConfig es un método estático que pertenece a una clase estática que utilizo para el acceso a base de datos (tengo un único objeto conexion). Estoy utilizando el módulo "Microsoft.Practices.EnterpriseLibrary.Data" para el acceso a datos, ya que así puedo utilizar un objeto de tipo "GenericDatabase" para conseguir independencia del tipo de base de datos utilizada.
¿Alguna idea de por donde puede estar el problema?