Pregunta

Tengo un Win-aplicación CGI actualmente estoy convirtiendo a ISAPI.

La aplicación utiliza el TDataset descendientes de los Sistemas Extendidos de Advantage Database Server.

Como sólo puede haber una instancia de un TAdsSettings objeto, este debe ser en el hilo principal.

TAdsQuery objetos son necesarios en la solicitud de hilos.

En este trabajo - es decir, la AdsQueries en la solicitud de hilos recoger la configuración global de la AdsSettings objeto en el principal hilo, y este ser a prueba de hilos?

¿Fue útil?

Solución

Sí, va a trabajar.El TAdsSettings componente modifica la configuración en la Ventaja Cliente Engine (ACE), y con ISAPI habrá una instancia de ACE cargado que todos los hilos de su uso.

Yo no lo recomiendo, sin embargo.Dependiendo de la configuración que están cambiando tendría más sentido a llamar simplemente la ACE Api directamente.Por ejemplo, si usted sólo ajuste del formato de fecha, tiene más sentido para eliminar la TAdsSettings componente y sólo llamar AdsSetDateFormat60, que tiene un identificador de conexión.Deshacerse de la TAdsSettings componente elimina un montón de llamadas para establecer ACE configuración global.Muchas de esas llamadas que tiene que tener un objeto sync para mantener todas las conexiones se apaga mientras el mundial es cambiado.Que tendrá un negativo impacto en el rendimiento, especialmente en una aplicación multiproceso como una aplicación web.En lugar de hacer llamadas que operan en el identificador de conexión especificado.

Usted puede obtener el identificador de conexión haciendo referencia a la TAdsConnection.Identificador de la propiedad o llamando al TAdsQuery.GetAceConnectionHandle método.

Otros consejos

Asegúrese de que el AdsQueries utilizar para Sincronizar el acceso a la TAdsSettings directamente (o utilizar un sistema de mensajería para comunicarse entre subprocesos de trabajo y el hilo principal en lugar de acceder directamente), si no están en el hilo principal (es decir, System.MainThreadID <> Windows.GetCurrentThreadID)

También me había hecho esta pregunta en el grupo de noticias:devzone.advantagedatabase.com la Ventaja.Delphi

En aras de la exhaustividad, voy a añadir otra pregunta/respuesta del resto de ese hilo:

Pregunta (Me):

Muchas de las consultas en los hilos no están actualmente conectados a un TAdsConnection objeto.Estoy planeando crear una conexión para cada hilo para estos "huérfanas" consultas de usar, pero es una gran aplicación y esto tomará tiempo.También estoy bastante seguro de que la única que no es el predeterminado propiedad en el TAdsSettings objeto es el tipo de servidor de conjunto, que puede también se pueden establecer en el componente de conexión, de modo que una vez que todas las consultas se vinculado a las conexiones, la configuración del componente no será necesario.Voy a mirar en llamar a la configuración de la API directamente como una alternativa.

Mientras tanto, tengo una pregunta acerca de roscado y las consultas con ningún componente de conexión asignado.He observado a partir de los archivos de ayuda que si consultas en varios hilos comparten un único objeto de conexión, el las consultas se ejecutan en serie en lugar de simultáneamente.Con un objeto de conexión en cada hilo, este no debería ser un problema, pero estoy pregunte acerca de las consultas que hacer no tener un objeto de conexión asignado.Van a ser considerado como independiente de las conexiones de el punto de vista de subprocesamiento múltiple concurrencia, o serán se considera que en la misma conexión y por lo tanto tienen que ceder el paso a cada uno de los otros?

Respuesta (Jeremy):

Usted tendrá que hacer frente a esto.Se acaba de búsqueda en una lista global de conexiones para encontrar uno con el mismo camino, y van a utilizar esa conexión.No es bueno en una aplicación multiproceso.

Así, a partir de Jeremy respuesta es mejor crear al menos una TAdsConnection objeto para cada hilo y asegurar que todas las consultas se unen a él, de lo contrario, la serialización puede ocurrir.

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