2008-12-23 19 views
5

Tengo una aplicación C# WINDOWS que tiene varios subprocesos. Tengo entendido que en un entorno web, las conexiones se agrupan automáticamente. También entiendo que en una aplicación de Windows, este no es el caso. Por lo tanto, para una aplicación de Windows, la misma conexión se debe usar y no cerrar después de cada llamada, pero se cierra cuando la aplicación se apaga.C# Aplicación de Windows: ¿muchos hilos utilizando la misma conexión?

Aunque tengo curiosidad, ¿es correcto? Si es así, ¿pueden dos subprocesos usar la misma conexión para obtener un conjunto de datos de la base de datos al mismo tiempo o esa cola está en cola?

Gracias

Respuesta

2

Es mi entendimiento de que en un entorno web , las conexiones se agruparon automáticamente. También es mi entendiendo que en una aplicación de Windows, , este no es el caso.

No, esto es incorrecto, como señaló m3rLinEz. Las conexiones siempre se agrupan.

Por lo tanto, para una aplicación de Windows, la misma conexión debe ser utilizado y no cerrado después de cada llamada, pero en lugar cierra cuando la aplicación se cierra.

Usted podría mantener una conexión abierta para la duración de la aplicación en una aplicación WinForms monolítica. Pero es mejor utilizar el patrón estándar de conexiones de apertura/cierre cuando lo necesite. La agrupación de conexiones significa que no notará una diferencia de rendimiento. Y su código de acceso a datos será compatible con aplicaciones de servidor como ASP.NET.

Si es así, es posible que dos hilos de utilizar la misma conexión para obtener un conjunto de datos de la base de datos al mismo tiempo o es que funcionalidad en cola?

No. Las clases ADO.NET (conexión, comando, etc.) no son seguras para subprocesos y no se deben compartir entre subprocesos sin sincronización. Pero como se señaló anteriormente, debe preferir el patrón estándar para el acceso a los datos.

0

ok - así que esta suposición fue provocada por la observación: cuando probé la configuración de una aplicación win en la forma de piscina típica, siempre experimento un retraso de 3-5 segundos mientras se establece una conexión real con el servidor remoto. Incluso cuando hice un abierto, luego un cierre, la próxima consulta siempre tendría este retraso.

Cuando el servidor se conecta, obviamente no establece una conexión para cada conexión en la agrupación. Además, ¿el mecanismo de agrupamiento es lo suficientemente inteligente como para tomar una conexión que sabe que ya está abierta o es posible que simplemente tome una conexión aleatoria?

¿Cuál es la conexión máxima predeterminada en la agrupación?

+0

El valor predeterminado depende del proveedor (100 para SqlConnection) y la agrupación se puede configurar mediante parámetros en la cadena de conexión. La demora de 3-5 segundos no suena normal, le sugiero que intente crear un pequeño código de reproducción y publicación que muestre este comportamiento. – Joe

Cuestiones relacionadas