Después de fairamountofresearch y algunos errors, modifiqué mi código para que cree un nuevo DataContext cada vez que se consulta la base de datos o se insertan datos. Y la base de datos se consulta con frecuencia: para cada una de las 250k transacciones que se procesan, se consulta la base de datos para obtener un ID de cliente, ID de departamento y categoría antes de insertar la transacción.¿Por qué la reutilización de un DataContext tendría un impacto negativo en el rendimiento?
Así que ahora estoy tratando de optimizar el código, ya que solo estaba procesando alrededor de 15 transacciones por segundo. Eliminé algunas consultas extrañas y agregué algunos índices y lo obtuve hasta 30/seg. Luego pensé que, aunque todo el mundo dice que un DataContext es liviano, tiene que costar algo para crear uno nuevo 4 veces por transacción, así que intenté reutilizar el DataContext. Descubrí, para mi sorpresa, que al reutilizar el contexto, el rendimiento se degradaba a 10 transacciones por segundo.
¿Por qué sería este el caso? ¿Es porque el DataContext guarda en caché las entidades en la memoria y primero busca a través de su lista en memoria antes de consultar la base de datos? Entonces, si, por ejemplo, busco la identificación del cliente (clave principal) para el cliente con el nombre 'MCS' y la columna del nombre del cliente tiene un índice agrupado para que la consulta de la base de datos sea rápida, la memoria interna la búsqueda será más lenta?
¿Y es cierto que la creación/eliminación de tantas conexiones de base de datos podría ralentizar las cosas, o se trata simplemente de otra optimización prematura? Y si es cierto, ¿hay alguna manera de reutilizar un DataContext pero hacer que realice una consulta de base de datos real para cada consulta de linq a sql?