[ Foro de C# ]

Uso de Array Bidimensionales

17-Jan-2011 23:23
Carlos Gutierrez
2 Respuestas

Hola a todos los participantes de este foro. Estoy tratando de aprender por mi cuenta el uso de este lenguaje de programación y la verdad es que tengo algunas preguntas sobre el uso de arrays:

- Que tanta información puedo almacenar en un array. Por ejemplo tengo una base de datos que una tabla tine 17,000 clientes, en otra tabla casi 2'000,000 de registros de cuentas cancelas y por cobrar.
- Que tan eficiente (no sobrecarga los recursos del PC)puede ser el uso de un Array.
- En que casos reales podría aplicar esto de los Array.

Agradezco de antemano la atención que puedan dar a estas preguntas.


21-Jan-2011 10:56
Nacho Cabanes (+31)

Veamos. Decías...

- Que tanta información puedo almacenar en un array. Por ejemplo tengo una base de datos que una tabla tine 17,000 clientes, en otra tabla casi 2'000,000 de registros de cuentas cancelas y por cobrar.


Pero eso no es un array bidimensional. Me explico: si cada uno de esos 17.000 clientes tuviera 2.000.000 de datos, cada uno de los cuales fuera un número "float" (que ocupa 4 bytes), reservarías espacio con un programa como:

 
class ejemploArray
{
    public static void Main()
    {
        float[,] datosClientes;
        datosClientes = new float[17000,2000000];
        System.Console.WriteLine("Conseguido");
    }
}
 


pero típicamente esto te daría un error de que no hay memoria suficiente, porque son aproximadamente 2 x 4 x 17 gigabytes = 136 gigabytes, y ningún ordenador "de consumo" tiene esa cantidad de memoria hoy por hoy.

Pero insisto: realmente no creo que tengas 17.000 clientes, cada uno de los cuales tenga 2.000.000 de movimientos, así que no es un array bidimensional.

Si realmente tienes unos 300 bytes (por ejemplo) destinados a los datos de cada cliente (nombre, dirección, etc), un array con los 17.000 clientes necesitaría unos 5 Mb de memoria, algo que sí es totalmente razonable hoy en día; si cada uno de esos 2 millones de datos ocupa unos 30 bytes (importe, fecha, código de cuenta, etc), hablaríamos de otros 60 Mb. En total necesitarías unos 65 Mb, algo totalmente aceptable en un ordenador normal. Pero no es una array bidimensional, sino dos arrays cuya información está relacionada.

En general, la idea sale a ser: ¿cuanta información puedo guardar en un array?  Tanta como memoria (disponible) tengas en tu sistema. Ya ves que un array "normal" de cerca de un millón de elementos deberías poder manejarlo sin problemas en un ordenador moderno.


- Que tan eficiente (no sobrecarga los recursos del PC)puede ser el uso de un Array.

Un array puede gastar mucha memoria si es grande, pero nada más. El acceso por posición es inmediato: si cada elemento del array ocupa 50 bytes, y quieres ir al elemento 17, tendrás que saltar 16x50 = 800 bytes, algo que el ordenador hace por ti y que es instantáneo. En cambio, el acceso por contenido ("la ficha de Juan") es más lento, porque hay que recorrer y comparar.


- En que casos reales podría aplicar esto de los Array.

En los casos reales en los que conoces de antemano el tamaño de tus datos, este tamaño va a ser estable, y vas a buscar por posición. Por ejemplo: los meses del año son claramente un dato candidato a array: siempre habrá 12, y siempre el segundo será Febrero.

Si no sabes cuantos datos vas a necesitar, o si tus datos son muy variables, o quizá incluso si vas a tener que buscar "por contenido", hay alternativas mejores.

Por ejemplo, para 2.000.000 de clientes, lo natural no es guardarlos en un array, sino apoyarte en un gestor de base de datos, aunque sea uno pequeño como SQLite, que te va a permitir usar una cantidad de datos cualquiera y hacer búsquedas avanzadas con más facilidad (y con una rapidez comparable o incluso mayor que si tú programas una búsqueda en arrays).


27-Jan-2011 02:42
Carlos Gutierrez

Gracias por la explicación, esta bastante clara.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)