uso patron example ejemplos diseño desventajas consulta code c# multithreading linq design-patterns linq-to-sql

patron - singleton c# example code



Uso de un patrón de Singleton para Linq al contexto de datos SQL (2)

De hecho, vine aquí porque sentía que un patrón singleton sería perfecto también para Linq Datacontext. Pero después de ver sus problemas lo hace porque no lo es.

Aquí hay un ejemplo de cómo escribiría un Singleton Linq DataContext:

class DataAccess { private static DataContext db = null; private DataAccess() { } public static DataContext GetInstance() { return db ?? (db = new DataContext()); } }

En el patrón singleton, configura la instancia de DataContext como estática. Bueno, en un entorno de subprocesos múltiples, un objeto estático causará colisiones como los errores que estás viendo. Tienes suerte de obtener esos errores. Al usar múltiples hilos, puede enviar cambios de otro hilo y luego hacer que el envío del hilo original cause un gran desorden.

Me quedaría con la implementación no estática. Es cierto que sé que es decepcionante, realmente quería usar ese patrón aquí también.

Tengo cierta confusión en Linq con respecto a SQL. Estoy buscando una razón real por la cual la clase de contexto de datos da la excepción de Follwing algunas veces.

"Ya hay un lector de datos abierto asociado con este comando que debe cerrarse primero

Especialmente en el entorno multitarea. La mayoría de las personas dicen que el motivo es que el contexto de datos no es seguro para subprocesos. Todos están sugiriendo utilizar DataContex como uno por unidad de trabajo.

Por favor refiérase al siguiente hilo para la mejor respuesta

Contexto de datos de Linq a SQL en varios hilos

Pero en mi caso, estoy usando otra clase llamada "A" que se implementa en el patrón Singleton. El propósito de esta clase es proporcionar el objeto de contexto de datos de manera única. Estoy manteniendo una instancia de esta clase "A" como instancia global en derivadas clase y llamadas a Datacontex mediante el uso de una instancia particular.

Mi pregunta es,

¿Mi llamada al método causará un crecimiento descontrolado de la memoria? basado en mi comprensión, singleton mantiene una instancia como objeto estático. Si mi suposición es incorrecta, por favor dame una buena explicación.

Nota:

De cualquier forma, mi llamada al método arroja la misma excepción. Así que estoy seguro de que el mismo problema también ocurrirá en este escenario.


Su enfoque causará problemas en general. Un DataContext no está destinado a ser un singleton. Simplemente no lo hagas.

Incluso si A es un singleton, cree un nuevo DataContext dentro de los métodos apropiados dentro de A , en lugar de tener un DataContext como una variable dentro de A (También podría considerar si A realmente debería ser un singleton).