2011-03-09 12 views
5

Tengo una tabla que incluye 230 columnas y 12 millones de filas.Actualización de LINQ-a-SQL: problemas de rendimiento

Necesito actualizar 123 campos de CADA fila.

Si trato de hacerlo con LINQ-To-Sql, recibo System.OutOfMemory Exception.

Sé que no obtengo el error de OutofMemory si deshabilito el seguimiento de objetos. Pero creo que no puedo realizar actualizaciones si deshabilito el seguimiento de objetos.

¿Cuál es la mejor manera de actualizarlos?

+0

¿Los valores de los 123 campos serán diferentes para cada fila? ¿Se pueden calcular con alguna fórmula? En otras palabras, ¿puede hacer esta operación con una sola instrucción SQL UPDATE? –

+0

Supongo que está configurando los mismos datos en cada fila, ya que no podrá mantener tantos objetos en la memoria. La respuesta simple es usar un procedimiento almacenado y arrastrarlo a su archivo EDML. – Paddy

+7

230 columnas suenan sospechosas ... –

Respuesta

10

Esa no es una tarea adecuada para LINQ-to-SQL, o francamente cualquier ORM. Usted no desea querer arrastrar tantos datos dos veces a través de la red de esa manera; lo que idealmente debería escribirse en TSQL puro, tal vez mediante la inserción masiva/SqlBulkCopy para completar una tabla separada si necesita combinar con datos de otras fuentes.

0

Definitivamente le sugiero que cambie la arquitectura, desacople la gran tabla en varias pequeñas y definitivamente evite linq-to-sql para esta cantidad de datos.

Cree la arquitectura de forma que tenga clases para cada entidad en un nivel comercial que invoque procedimientos almacenados de consultas T-SQL para actualizar los datos en el nivel de acceso a datos.

Cuestiones relacionadas