Tan malas son las listas en visual basic que nadie las usa ?

Estado
Cerrado para nuevas respuestas.

IEN

Newbie Lvl 1
Bueno eso... encontre este foro hace poco y me eh leido paginas y pagians de codigo... tambien eh leido mucho del codigo del juego...

Y no puedo dejar de notar... como la mayoria opta por redimensionar vectores... para sacar elementos etc...

Claramente utilizar una lista en visual basic no tiene la misma performance que hacerlo en c o c++... pero... tan malas son :S? que se prefiere generar todo un nuevo vector en ves de agregar o quitar un elemento de una lista?
 

elnick

Newbie Lvl 3
A veces es por costumbre comodidad o por copiar codigo, muchos codigos que vos encontras es de gente que no sabe mucho de visual basic pero se da mañan con los codigos escritos y los modifica.
 

Tavo

[color=#BF0000]Lucha por tus ideales![/color]
¿Listas en Visual Basic?, no hay ninguna lista ASCII, la tenes que programar vos, y hay un intento de una Linked List en VB que safa... pero es mejor utilizar un vector en ese momento, igual, todo depende de varios analisis, si se va a modificar amenudo generalmente conviene gastar mas memoria y hacer una Lista.
 

IEN

Newbie Lvl 1
¿De qué se compone un objeto Collection?
Los objetos Collection almacenan cada elemento en una variable Variant. De esta forma, la lista de cosas que se pueden agregar a un objeto Collection es igual que la lista de cosas que se pueden almacenar en una variable Variant. Entre ellas se incluyen los tipos de datos, los objetos y las matrices estándar, pero no los tipos definidos por el usuario.

Las variables Variant siempre ocupan 16 bytes, independientemente de lo que contengan, por lo que el uso de objetos Collection no es tan eficaz como el uso de matrices. Sin embargo, nunca tiene que aplicar ReDim a un objeto Collection, lo que produce un código más limpio y más fácil de mantener. Además, los objetos Collection ofrecen un acceso por clave extremadamente rápido, que no ofrecen las matrices.

Nota Más exactamente, una variable Variant ocupa siempre 16 bytes incluso si los datos se encuentran almacenados en cualquier otra parte. Por ejemplo, si asigna una cadena o una matriz a una Variant, ésta contiene un puntero a una copia de la cadena o de los datos de la matriz. En los sistemas de 32 bits sólo se utilizan como puntero 4 bytes de la Variant y realmente no hay ningún dato en la Variant.

Si almacena un objeto, la Variant contiene la referencia de objeto, como si fuera una variable de objeto. Igual que ocurre con las cadenas y las matrices, solamente se utilizan 4 bytes de la Variant.

Los tipos de datos numéricos se almacenan dentro de la Variant. Independientemente del tipo de datos, la Variant sigue ocupando 16 bytes.

A pesar del tamaño de las variables Variant, habrá muchas ocasiones en las que tenga más sentido usar un objeto Collection para almacenar todos los tipos de datos enumerados anteriormente. Tenga en cuenta su efecto: los objetos Collection le permitirán escribir un código limpio y fácil de mantener, al precio de almacenar los elementos en variables Variant.

Propiedades y métodos del objeto Collection
Los objetos Collection disponen de propiedades y métodos que se pueden usar para insertar, eliminar y recuperar elementos de una colección.

Propiedad o método Descripción
Método Add Agrega elementos a la colección.
Propiedad Count Devuelve el número de elementos de la colección. Sólo lectura.
Método Item Devuelve un elemento, por índice o por clave.
Método Remove Elimina un elemento de la colección, por índice o por clave.


Estas propiedades y métodos sólo proporcionan los servicios más básicos de las colecciones. Por ejemplo, el método Add no puede comprobar el tipo de objeto que se agrega a la colección para asegurar que la colección contenga un único tipo de objeto. Puede proporcionar una funcionalidad más robusta y propiedades, métodos y eventos adicionales, si crea su propia clase de colección, como se describe en "Crear clases de colección propias", más adelante en este capítulo.

Los servicios básicos de agregar, eliminar y recuperar elementos de una colección dependen de claves e índices. Una clave es un valor String. Puede ser un nombre, un número de documento de identidad, un número de la seguridad social o simplemente un dato de tipo Integer convertido en tipo String. El método Add le permite asociar una clave con un elemento, como se describe más adelante en esta sección.

Un índice es un dato de tipo Long entre uno (1) y el número de elementos de la colección. Puede controlar el valor inicial del índice de un elemento mediante los parámetros con nombre before y after, pero su valor puede cambiar si agrega o elimina otros elementos.

Nota Una colección cuyo índice empieza por 1 se conoce como basado en uno, como se explica en "Colecciones en Visual Basic".

Puede usar el índice para recorrer los elementos de una colección. Por ejemplo, el código siguiente muestra dos maneras de aumentar un 10 por ciento el sueldo de los empleados de una colección de objetos Employee, siempre y cuando la variable colEmployees contenga una referencia a un objeto Collection.

Dim lngCt As Long
For lngCt = 1 To colEmployees.Count
colEmployees (lngCt).Rate = _
colEmployees (lngCt).Rate * 1.1
Next

Dim emp As Employee
For Each emp In colEmployees
emp.Rate = emp.Rate * 1.1
Next

Sugerencia Para obtener un mayor rendimiento, utilice For Each para recorrer los elementos de un objeto Collection. En este caso For Each es notablemente más rápido que la iteración mediante índice, aunque esto no es cierto en todas las implementaciones de colecciones: depende de cómo almacena la colección los datos internamente.


Lo que encontre en el MSDN jejej xD... estoy en boludo... porque me conteste solo...

al parecer la razon por la que no se utiliza las colecciones... o listas si vamos para el caso practico es porque ocupan demasiado espacio en memoria... casi 5 veces lo que ocuparia un Integer... aunque nos salvamos de el tener que tener un vector doblemente cargado cuando uno lo redimensiona...

Se deberia hacer un seguimiento de un programa que agregue muchos objetos a una coleccion y ver que tanta memoria consume... la velocidad con la que se puede encontrar un elemento... etc etc como para compararlo VS el redimensionamiento de vectores :p...

Mañana si me da lo hago...


saludos: )
 

Tavo

[color=#BF0000]Lucha por tus ideales![/color]
Las colecciones de VB son listas FIFO. Lo que pasa es que VB es una bosta y usan Variant en vez de Objects....
 

Maraxus

Newbie Lvl 1
Tavo dijo:
¿Listas en Visual Basic?, no hay ninguna lista ASCII, la tenes que programar vos, y hay un intento de una Linked List en VB que safa... pero es mejor utilizar un vector en ese momento, igual, todo depende de varios analisis, si se va a modificar amenudo generalmente conviene gastar mas memoria y hacer una Lista.

WTF?? Lista "ASCII"??? ASCII es un encoding de caractéres en un byte... NADA tiene que ver con una lista.... Posiblemente hayas querido decir "ANSI", pero nuevamente esto hubiese merecido un "WTF??", ya que el ANSI estandariza. Para que algo requiera ser estandarizado tiene que haber mucha gente que lo hace de muchas formas distintas. y VB lo hace sólo MS, no necesita standard alguno....

Por otro lado, la collection de VB no es un intento de Linked List. No existe tal cosa en VB como parte del lenguaje. La collection es un híbrido entre lista FIFO y tabla hash y apesta como ambas.

Por el contrario, usar un array ahorra memoria respecto a una Collection y además es mucho más eficiente.

Incluso como tabla Hash, resulta MUCHO más eficiente programar una tabla hash en VB que usar las mierdas de Collections.

La única "ventaja" real que ofrecen, como bien mencionaron arriba, es el uso de For In para una sintaxis más sencilla e intuitiva, pero sinceramente, me importa poco, y si la tarea es crítica, el ahorro de memoria y la mejora de performance contra una lista ordenada, un árbol, tabla hash o whatsoever programada por uno mismo en VB es más que significativa como para no usar la mierda que VB ofrece.
 

Tavo

[color=#BF0000]Lucha por tus ideales![/color]
(Siempre agrego la I entre ASCII y ASCI, perdón).

Sobre la Linked List (el intento), no me referí a que venga con el VB, sino que vi códigos que intentaban hacerlo... (Sin ir mas lejos encontre uno que había hecho Morgolock en su "mini página", me lo baje para verlo pero bueno... en VB mucho no se puede hacer...).
 

Maraxus

Newbie Lvl 1
Tavo dijo:
(Siempre agrego la I entre ASCII y ASCI, perdón).

WTF??? Qué es ASCI?? Art & Science Colaborations, Inc.?? American Society of Clinical Investigation?? Administrative Staff College of India??

Posta que cada vez que tirás una sigla te entiendo menos y estoy más convencido de que estás embarrandola.....
 

Pocho

Oráculo Lvl 3
ajajajajajajajajaja
jajajajjajajajaja

Art & Science Colaborations, Inc.


me mato eso xd



posta, ya fue este tema
 

IEN

Newbie Lvl 1
Maraxus dijo:
Tavo dijo:
¿Listas en Visual Basic?, no hay ninguna lista ASCII, la tenes que programar vos, y hay un intento de una Linked List en VB que safa... pero es mejor utilizar un vector en ese momento, igual, todo depende de varios analisis, si se va a modificar amenudo generalmente conviene gastar mas memoria y hacer una Lista.

WTF?? Lista "ASCII"??? ASCII es un encoding de caractéres en un byte... NADA tiene que ver con una lista.... Posiblemente hayas querido decir "ANSI", pero nuevamente esto hubiese merecido un "WTF??", ya que el ANSI estandariza. Para que algo requiera ser estandarizado tiene que haber mucha gente que lo hace de muchas formas distintas. y VB lo hace sólo MS, no necesita standard alguno....

Por otro lado, la collection de VB no es un intento de Linked List. No existe tal cosa en VB como parte del lenguaje. La collection es un híbrido entre lista FIFO y tabla hash y apesta como ambas.

Por el contrario, usar un array ahorra memoria respecto a una Collection y además es mucho más eficiente.

Incluso como tabla Hash, resulta MUCHO más eficiente programar una tabla hash en VB que usar las mierdas de Collections.

La única "ventaja" real que ofrecen, como bien mencionaron arriba, es el uso de For In para una sintaxis más sencilla e intuitiva, pero sinceramente, me importa poco, y si la tarea es crítica, el ahorro de memoria y la mejora de performance contra una lista ordenada, un árbol, tabla hash o whatsoever programada por uno mismo en VB es más que significativa como para no usar la mierda que VB ofrece.


esta respuesta si me gusto xD...
 
Estado
Cerrado para nuevas respuestas.
Arriba