Foros del Web » Programación para mayores de 30 ;) » .NET »

Deshabilitar el Pooling me resolvería ??

Estas en el tema de Deshabilitar el Pooling me resolvería ?? en el foro de .NET en Foros del Web. hola, tengo la siguiente problemática en una aplicación de escriotorio. Para su desarrollo se empleó una librería ORM llamad Cooperator Framework, y revisando encuentro que ...
  #1 (permalink)  
Antiguo 06/01/2016, 11:22
 
Fecha de Ingreso: octubre-2007
Mensajes: 273
Antigüedad: 16 años, 6 meses
Puntos: 5
Deshabilitar el Pooling me resolvería ??

hola, tengo la siguiente problemática en una aplicación de escriotorio.
Para su desarrollo se empleó una librería ORM llamad Cooperator Framework, y revisando encuentro que la manera de traer de vuelta las entidades que no están marcadas con Lazy Load, internamente se abre una nueva conexión que no encuentro la manera de "matar" (cerrar).

Si la aplicación se mantiene durante horas continuas en ejecución evidentemente el número de conexiones abiertas crece. Supuestamente he resuelto la situación deshablitando el pooling durante la autenticación del usuario en el sistema. Qué inconvenientes tendría deshabilitar el pooling ??
  #2 (permalink)  
Antiguo 06/01/2016, 12:26
(Desactivado)
 
Fecha de Ingreso: enero-2015
Mensajes: 393
Antigüedad: 9 años, 3 meses
Puntos: 52
Respuesta: Deshabilitar el Pooling me resovería ??

Desconozco ese framework, pero en general en .NET los objetos que usan recursos externos (como conexiones a una DB), implementan IDisposable y se necesita ejecutar el método Dispose() luego de utilizarlos, para que esos recursos sean liberados, o bien usarlos dentro de un bloque using() { } que llama al método Dispose() de manera automática cuando el objeto sale del scope del bloque.
  #3 (permalink)  
Antiguo 06/01/2016, 14:40
 
Fecha de Ingreso: octubre-2007
Mensajes: 273
Antigüedad: 16 años, 6 meses
Puntos: 5
Respuesta: Deshabilitar el Pooling me resolvería ??

Estoy seguro que esa parte que explicas, el framework la implementa, pero habrá algún bug que hace que la carga de las entidades asociadas se realice bajo otra conexión que no es posible cerrar.

Rectificando un poco la duda planteada, no importa si es por Lazy Load o no, ciertas entidades asociadas su carga se realiza bajo una nueva conexión.

Digamos que tenemos este modelo:

Código Java:
Ver original
  1. clase Factura
  2. Int id;
  3. Datetime fechaRecibida
  4. String anotación;
  5. Entities.LineaFactura  lineaFacturaAsoc; // digamos que no marque con Lazy Load esta.
  6.  
  7. clase LineaFactura
  8. Int     id;
  9.     String descripcion;
  10.     Entities.Empresa empresa; // Digamos que no marque con Lazy Load esta.
  11.     Entities.FacturaList facturas = new Entities.FacturaList();
  12.  
  13. clase Empresa
  14.     String codigo;
  15.     String nombre;
  16.     String dirección;
  17.     String teléfono;


Para este modelo digamos que quiero obtener un listado de facturas
Haciendo uso del framework (Cooperator) sería así:

Código Java:
Ver original
  1. public Entities.FacturaList FacturasRecibidas()
  2. {
  3.     try{
  4.         return Mappers.FacturaMapper.Instance().GetAll();
  5.     }catch(...)
  6.     {
  7.         ...
  8.     }
  9. }

cuando se hace la carga de la entidad LineaFactura de Cada Factura obtenida por supuesto se obtienen las Empresas (no estan marcadas con Lazy Load).
Para este caso, se abre una nueva conexion para la carga de la entidad Empresa relacionada a cada LineaFactura.

Que no se carguen por Lazy Load las entidades asociados lo hice para que comprendieran la situacion que afronto, aunque hay situaciones en las que sí tengo que dejar ciertas asociaciones o composiciones sin el Lazy Load.

en algunos casos, he tenido que dejar de hacer uso de las clases Mapper y llenar las listas mediante DataReader encerrados en directivas using, y claro que no hay problemas, pero es un proceso tedioso por lo que me decanté por deshabilitar el pooling.

Última edición por X_fran; 06/01/2016 a las 14:42 Razón: Formatear el pseudo codigo.
  #4 (permalink)  
Antiguo 07/01/2016, 01:21
Avatar de Malenko
Moderador
 
Fecha de Ingreso: enero-2008
Mensajes: 5.323
Antigüedad: 16 años, 3 meses
Puntos: 606
Respuesta: Deshabilitar el Pooling me resolvería ??

Prueba a usar el SQL Profiler para ver realmente que está pasando: cuantas conexiones abre, ver si las cierra, que consultas usa, etc.

En cualquier caso, si el framework que comentas te está dando más problemas que beneficios, porque no usas directamente Entity Framework?
__________________
Aviso: No se resuelven dudas por MP!
  #5 (permalink)  
Antiguo 08/01/2016, 10:39
 
Fecha de Ingreso: octubre-2007
Mensajes: 273
Antigüedad: 16 años, 6 meses
Puntos: 5
Respuesta: Deshabilitar el Pooling me resolvería ??

Revisando el profiler de SQL Server, es como les comentaba anteriormente, al cargar entidades relacionadas que no están marcadas con lazy load pues se abren nuevas conexiones. Las clases mapper que genera se basan en la llamada a stored procedures. Revisando un poco, si dejo la aplicación corriendo pero sin realizar ninguna operación contra la BD, pasado unos 6 minutos, se cierran las conexiones existentes, claro esto ha de ser por mecanismo del propio SGBD.
En cuanto a lo que me planteas de usar Entity Framework: no creo pueda hacerlo, la aplicación está desarrollada sobre .NET Framework 2.0, y ya está en uso, a mí me dieron la tarea de agregarle un subsistema para el control de pesaje de cargas e intentar mejorar el rendimiento de la misma, y no he podido actualizar la versión de .NET Framework porque mi acceso a internet es casi nulo y no tengo acceso a versiones actuales de Crystal Report, DotFuscator y el nuevo paquete para crear instaladores. Como vez soy un desarrollador con las manos casi atadas.

Etiquetas: deshabilitar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:56.