He encontrado que hay muy poca información sobre este tema, esperaba que alguien me pudiera indicar cierta información y posible código de muestra.¿Compartir una conexión db entre hilos en una aplicación C#?
Respuesta
Yo diría que no comparta el objeto de conexión, solo cree una nueva conexión y permita que ADO.net maneje la agrupación de conexiones.
Tiendo a estar de acuerdo, el servidor de base de datos está diseñado para administrar la agrupación de conexiones, lo mejor es dejar que el servidor de bases de datos diseñado para hacer –
Generalmente las conexiones no son seguras para subprocesos (SqlConnection, MySqlConnection y OracleConnection mencionan específicamente que no son seguras para subprocesos).
No comparta una conexión entre hilos.
No hay código de muestra en la naturaleza porque (casi) nadie lo hace porque es una idea muy, muy mala.
para responder a los parámetros actuales de la cuestión, en lugar de despedirlos, me envuelva el DbCommand
para ayudar a sincronizar el acceso a la conexión (si y sólo si que sea absolutamente necesario).
public class SyncedDbCommand : DbCommand
{
private DbCommand _cmd;
private object _sync;
public SyncedDbCommand(DbCommand cmd, object sync)
{
_cmd = cmd;
_sync = sync;
}
// omitted basic proxy method overrides
protected override DbDataReader ExecuteDbDataReader(CommandBehavior behavior)
{
Monitor.Enter(_sync);
return _cmd.ExecuteReader();
}
public override int ExecuteNonQuery()
{
Monitor.Enter(_sync);
return _cmd.ExecuteNonQuery();
}
public override object ExecuteScalar()
{
Monitor.Enter(_sync);
return _cmd.ExecuteScalar();
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
Monitor.Exit(_sync);
}
base.Dispose(disposing);
}
}
Para utilizar el ejemplo, usted tiene que crear una instancia con una real DbCommand
, así como alguna instancia de objeto que se comparte entre todos los usos de una conexión. En el uso más simple, incluso podría pasar el objeto de conexión como el objeto de bloqueo. La instanciación debería ocurrir en una declaración using
. Esto no le impide saber exactamente cuáles son sus requisitos de uso y cómo funciona la clase Monitor
y el bloqueo.
De una forma u otra, desea sincronizar el uso de la conexión entre subprocesos, y lo anterior es un enfoque para hacerlo.
Absolutamente NO HAGA esto, no hay una buena razón para hacerlo y afectará el rendimiento de su aplicación. Use la agrupación de conexiones como los estados de respuesta anteriores. –
"No hay una buena razón"? Sin conocer la arquitectura de su código, ¿cómo puedes reclamar eso? En cuanto a compartir una conexión, es un método bien conocido para habilitar transacciones sin promocionar a MSDTC. Este es un gran beneficio de rendimiento. Sin embargo, comenzando desde cero, por supuesto, no aconsejaría el enfoque descrito en mi respuesta. Pero en * respeto al que pregunta y respondiendo a los detalles de su pregunta *, esta es mi recomendación. –
Todavía esperando ser iluminado ... –
- 1. cómo compartir una transacción entre varios hilos
- 2. SQLite: Compartir conexiones entre hilos para leer y escribir
- 3. Cómo compartir datos entre diferentes hilos En C# usando AOP?
- 4. C# Aplicación de Windows: ¿muchos hilos utilizando la misma conexión?
- 5. JDBC: ¿Puedo compartir una conexión en una aplicación multihilo y disfrutar de buenas transacciones?
- 6. Compartir un JavaVM * entre hilos en Android NDK
- 7. C# comunicación entre hilos
- 8. ¿Es posible compartir un objeto opengl framebuffer entre contextos/hilos?
- 9. NSPrivateQueueConcurrencyType de Datos Básicos y compartir objetos entre hilos
- 10. Compartir una sesión entre Ruby y PHP
- 11. ¿Cómo compartir una variable entre dos clases?
- 12. Compartir un objeto entre dos hilos y el programa principal
- 13. C++ Boost Code ejemplo de lanzar una excepción entre hilos
- 14. Compartir una cookie entre dos sitios web
- 15. Python: ¿compartir una matriz numerada entre procesos?
- 16. Java comparte una variable entre dos hilos
- 17. Pasar datos entre hilos en C#
- 18. compartir una instancia Mangosta entre múltiples paquetes NPM
- 19. ¿Podemos crear 300,000 hilos en una aplicación C# y ejecutarlos en una PC?
- 20. Compartir una variable entre una clase y su miembro
- 21. cómo puedo compartir una sesión asp.net entre http y https
- 22. Compartir matriz entre lua y C
- 23. ¿Es posible compartir una declaración enum entre C# y C++ no administrado?
- 24. C global estático - compartido entre hilos?
- 25. Compartir datos entre AppDomains
- 26. Aplicación simple para compartir pantalla C#
- 27. Dos proyectos .NET, una cadena de conexión DB?
- 28. Establezca una conexión P2P en C#
- 29. ¿es posible compartir datos de sesión desde una aplicación asp.net mvc y una aplicación python?
- 30. Prisma: ¿Compartir datos entre ViewModels cargados en una región?
Supongo que esto también difiere de la base de datos al proveedor de la base de datos ... mysql, ms sql, sqlite ... – tuinstoel