2010-02-12 15 views
5

En nuestra aplicación n-tier ahora no tan moderna, hacemos un uso intensivo de los DataSets y estamos evaluando el cambio a otros objetos más livianos (es decir, colecciones de objetos tipificados).¿Cuál es el costo de memoria de un DataSet frente a otras clases de .Net Collection?

¿Hay algún documento de referencia acerca de cuánto podemos ganar en el consumo de memoria haciendo eso?

+0

Casi creo que este es el tipo de pregunta en la que la respuesta depende de muchos factores, incluida la forma en que se estructuran los objetos tipados. ¿Has intentado ejecutar algunos puntos de referencia? Como serializar varios miles de objetos en comparación con los mismos datos en un conjunto de datos. – David

+0

No estoy seguro si podemos comparar DataSet con tablas de datos relacionales fuera de línea con tipos de colección que son listas de objetos similares. Podemos comparar List y ArrayList, arrays y Lists pero no datasets. – sashaeve

+0

Hola @sash, gracias por tu contribución. Lo que quiero decir es que linq para entidades y linq para sql producen colecciones de objetos de una fuente de datos relacional y fueron el reemplazo natural de ADO.Net que usa DataSets. Entonces, en estos términos, creo que se pueden comparar. – jmservera

Respuesta

3

Los usuarios con mayor consumo de memoria para un DataSet son el objeto DataRow requerido para cada fila en una DataTable y el índice que se genera automáticamente para cada columna. El almacenamiento de los valores de la columna es eficiente, no puede mejorar eso. Reemplazar esto con una colección de colecciones genéricas permitirá la eliminación de las DataRows, que podrían ser un ahorro aproximado del 50% si DataTable no tiene muchas columnas.

Los índices son de lo que debe preocuparse. Realizan consultas en el DataSet muy rápido, lo perderá a menos que proporcione algún tipo de sustituto personalizado. Si es necesario proporcionar un sustituto es imposible de decir, depende del tipo de consultas que ejecute.

+0

Gracias por sus consejos. Estamos utilizando DataSets principalmente para editar, al igual que los objetos persistentes, por lo que no utilizamos tanto las características de indexación. Lo que usamos más es la función RowVersion para saber qué se editó. – jmservera

0

Esta pregunta es bastante subjetiva y depende de muchos factores que no se pueden mostrar aquí. Si la pregunta era si un DataSet consumiría más memoria que una colección genérica del mismo número de objetos, la respuesta es generalmente sí.

Dado que la pregunta es cuánto va a depender de los detalles de cómo está utilizando el DataSet (es decir, los datos de tipografía, los índices de DataViews?) Y solo medido con precisión a través de pruebas.

Sin embargo, dependiendo de cómo utilice los DataSets, es posible que tenga que reconstruir gran parte de esa funcionalidad.

Cuestiones relacionadas