Ver Mensaje Individual
  #18  
Antiguo 11-03-2008
rolandoj rolandoj is offline
Miembro
 
Registrado: abr 2007
Posts: 395
Reputación: 18
rolandoj Va por buen camino
Avance de las pruebas

Cita:
Empezado por rastafarey Ver Mensaje
buenos amigos yop uso ibo y jamas he tenido esos problemas.
Hola,

Agradezco mucho el aporte; pero, yo necesito que mis programas sean portables entre motores de bases de datos, luego no me sirven los componentes IBO.

Por otra parte, con las últimas pruebas, me asaltan dudas de que el acceso a la Base de Datos no sea el único problema. Veamos:

Una de las pruebas extremas que hice fué encerrar todo el código de una consulta en una sección crítica, y, para mi sorpresa, se bloqueó. Complementé la prueba implementando mi propia sección crítica para garantizar que no se ejecutará otra consulta mientras se estuviera ejecutando una llamada; y me funcionó bien.

La conclusión que saco es que algo pasa con el manejo del componente TCriticalSection y, por razones que desconozco, permitió que se ejecutara algo en "simultánea". Averigué algo y al parecer hay aspectos "oscuros" en el tema. La explicación dada en las ayudas de Delphi, y usualmente encontrada en ejemplos, puede no ser tan completa como podría esperarse, ya que encontré notas donde alguién advierte de problemas relacionados con ella e incluso dice que los variable compartidas TList deben ser protegidas con una clase diferente a TCriticalSection. Vean esta página: http://www.gothi.co.uk/2006/10/threading-in-delphi.html

El tema me interesa porque, por eficiencia, se manejan un objeto global para datos caches con varias listas descendientes de TStringList. No hay riesgo de que afecten las pruebas hechas porque durante las mismas nunca se han usado las opciones que modifican datos globales. Alguién sabe de algún hilo donde se trate a fondo este tema, o puede abrir alguno para ilustrarlo ?

Lo importante de este caso es que me ha hecho pensar en la posibilidad que el problema no esté en el propio acceso a la Base de Datos. El código de estas consultas es muy complejo y quizás se están llamando algunas rutinas de librería Delphi que no son hilo seguro. No lo había considerado antes porque tenía entendido que lo que no era hilo seguro eran los componentes visuales, y este es un DLL que no los usa; pero, quizás hay otras unidades que no lo son. Alguién puede sugerir como revisar esta posibilidad ?
Responder Con Cita