SqlBulkCopy es una transferencia directa, casi en forma de matriz de bytes, de datos de fila del cliente al servidor SQL. Es la manera más fácil de obtener datos en SQL Server.
Sin embargo, su rendimiento se basa en operaciones verdaderamente "a granel". Cientos o miles de filas no son necesariamente lo suficientemente altas como para justificar el uso.Decenas de miles a millones de filas son el rendimiento de SqlBulkCopy realmente brillará. Y, al final, de lo que realmente estamos hablando es de obtener los datos en el servidor.
Existen otros desafíos importantes para obtener un conjunto de filas en la tabla de una base de datos de producción. Reindexar, reordenar (si hay un índice agrupado), validación de la clave externa, todo este tipo de cosas le agrega tiempo a su inserción y es potencialmente un bloqueo de tabla e índice.
Además, los datos de TVP se escriben en el disco (como datos de tablas temporales), y luego se puede acceder a ellos para ponerlos en sus tablas. SqlBulkCopy es capaz de ir directamente a su mesa ... el rendimiento en ese caso es significativamente más rápido, sin embargo, uno debe equilibrar la velocidad para la concurrencia.
Creo que la regla general es que, si tiene que lidiar con un puñado de filas, piense en los TVP, y si tiene muchos miles de filas, considere obtener SQL Server tan pronto como sea posible a través de SqlBulkCopy.
se rompe el vínculo –
@JonBarker - Aquí está el enlace de GitHub: https://github.com/matthewschrager/Repository/blob/master/Repository.EntityFramework/EntityDataReader.cs – DaveHogan
@DaveHogan Me gusta la idea que tiene aquí. Estamos sembrando más de 200 mil productos y es doloroso por decir lo menos. Intenté incluirlo en nuestro repositorio EF de repositorio, pero al crear un elemento de Office que tiene un objeto secundario de direccionamiento, no crearía los elementos hijo o relación. ¿Es posible este tipo de cosas o está más allá del alcance del código vinculado? Gracias – Jon