elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Que tipo de lista dinamica me conviene utilizar?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Que tipo de lista dinamica me conviene utilizar?  (Leído 9,776 veces)
Skeletron


Desconectado Desconectado

Mensajes: 1.731


A long way to go


Ver Perfil WWW
Que tipo de lista dinamica me conviene utilizar?
« en: 8 Febrero 2010, 07:37 am »

Hola gente, les comento que acabo de terminar un indexador para un buscador mio (no es un buscador como google)
La cuestion, es que tengo varios hilos que acceden de forma sincronizada (Synklock) a un Generic.coleccion.List(of String)
Dentro del Synklock miro si la cadena que quiero agregar existe (con .Contains) y si no se encuentra, entonces e hago un .add

Cual es el problema? el problema está en que cuando el array comienza a tener unos cuantos millones de Strings (de 10 millones para arriba), la busqueda con el .Contains se pone demasiado LENTA.. y como sarban, eso no es muy bueno que suceda dentro de un Synklock, donde tengo unos 500 hilos por detras esperando para entrar...
El 98% del tiempo los hilos se la pasan esperando ahí para entrar.. ya que tarda demasiado en devolver el resultado el .Contains

Entonces pense en otro tipo de lista.. de esas que no se agregar los items repetidos...
No se bien si existen esas listas en vb.net, pero sé que en JAVA si, porque las utilice (treeset o hashset)

Conocen algun tipo de array de ese tipo, para que simplemente haga un .add y si ya esta el item, que lo borre solo, y si no esta, que lo agregue?

Gracias chicos!


En línea

MANULOMM


Desconectado Desconectado

Mensajes: 559


Erepublik.com


Ver Perfil
Re: Que tipo de lista dinamica me conviene utilizar?
« Respuesta #1 en: 9 Febrero 2010, 04:15 am »

lo mejor para esto es utilizar un diccionario, y segundo para hacer la busqueda utiliza linq sera mas rapido.
10 millones es un volumen muy alto para tener en memoria, por que no utilzas un repocitorio fisico, te ingenias algo con estadisticas o simplemente utilizas sql para eso... si lo haces en memoria te recomiendo mires LINQ Paralelo pero esto solo es para .net framework 4

Atentamente,

Juan Manuel Lombana
Medellín - Colombia


En línea


Skeletron


Desconectado Desconectado

Mensajes: 1.731


A long way to go


Ver Perfil WWW
Re: Que tipo de lista dinamica me conviene utilizar?
« Respuesta #2 en: 9 Febrero 2010, 05:24 am »

Gracias manu..
A ver si me asesoras un poco mas con el tema de DIccionarios y LINQ

Te comento Manu, que baje el tamaño maximo del array a 2.000 items.. cuando llega a 2.000 los hilos que trabajan en el "AREA 1", esperan que los de "AREA 2" analicen cada item y baje a menos de 1.000 items, así se reactivan los de "AREA 1"


Me gustaria que me digas como es el tema de los Diccionarios...
Como es la clase a crear?
Los items que se agrean quedan al final? se auto ordenan? no pueden entrar items repetidos? que me dices?

Me gustaria tener como un "LIST" simplemente con el plus de que no se agreguen los items repetidos.. y que se ingresen al final los items al darle add.

Tengo una base de datos MySQL Manu, te comento como funciona el programa:

20 hilos, cada uno agarra un link de la base de datos, descarga su codigo fuente, y agrega nuevamente a la base de datos todos los links a otras webs que encontro en ese codigo fuente..
En realidad.. todos agregan los nuevos links a un array (list), y luego, cuando todos terminan (algo así), se pasan todos a la base de datos (donde muchos no se agregan por estar repetidos)

Tambien los mismos links buscan imagenes.. y agregan a otro list....

Ambos list me gustarian que no tengan ni imagenes ni links repetidas...
Tu me dices que recomiendas un Diccionario?


Y para que dices de utilizar LINQ?
En línea

MANULOMM


Desconectado Desconectado

Mensajes: 559


Erepublik.com


Ver Perfil
Re: Que tipo de lista dinamica me conviene utilizar?
« Respuesta #3 en: 12 Febrero 2010, 03:58 am »

haber segun entendi estas haciendo un Bot como el de google o algo asi...

envez de crear un List<> creas un Dictionary<string,string> el primer parametro del Diccionario es un indice lo que optimizara tu busqueda. en realidad puede ser de cualquier tipo, el segundo es el tipo de lo que guardas en tu caso el tipo del List<>.

una recomendacion por que no vas consultado y guardando y para evitar que se repitan en la BD utilizas un Indice Unico... asi se llaman en SQL Server nose en MySQL como se llamaran.

Atentamente,

Juan Manuel Lombana
Medellín - Colombia
En línea


seba123neo


Desconectado Desconectado

Mensajes: 3.621



Ver Perfil WWW
Re: Que tipo de lista dinamica me conviene utilizar?
« Respuesta #4 en: 12 Febrero 2010, 04:17 am »

pregunta ¿ para que descargas el codigo fuente ?
En línea

Skeletron


Desconectado Desconectado

Mensajes: 1.731


A long way to go


Ver Perfil WWW
Re: Que tipo de lista dinamica me conviene utilizar?
« Respuesta #5 en: 12 Febrero 2010, 06:43 am »

Manu, obviamente que las ingreso a una base de datos, con clave unica.. Pero para agilizar el procesamiento y demas, hago el traspaso del array: "LinksNuevos" una vez que se hayan procesado 50 webs.. Así evito miles y miles de entradas a la abse de datos...
Por el tema de que una E/S, es muy muchisimo mas lenta que una comprobacion si esta o no esta una cadena dentro de un array..

Sebas, te respondo:
Descargo el codigo fuente de cada web para analizarle sus links, y así sucesivamente.
En línea

Skeletron


Desconectado Desconectado

Mensajes: 1.731


A long way to go


Ver Perfil WWW
Re: Que tipo de lista dinamica me conviene utilizar?
« Respuesta #6 en: 12 Febrero 2010, 06:57 am »

Y Manu, no hay manera de crear un diccionario de ese tipo, pero sin la clave? porque, no se ni que ponerle, no utilizaré la 1º clave.

Probaré hoy.. Pero: ¿Dictionary, no acepta entradas duplicadas?
En línea

MANULOMM


Desconectado Desconectado

Mensajes: 559


Erepublik.com


Ver Perfil
Re: Que tipo de lista dinamica me conviene utilizar?
« Respuesta #7 en: 12 Febrero 2010, 20:03 pm »

la clave seria por ejemplo un GUID o un HASH apartir de la cadena, o la misma cadena asi no podras tener indices repetidos,  pero pensandolo bien solo guardas la cadena... asi que seria lo mismo.....

haber si entendi bien.
entras a una web descargas su codigo fuente analisas los vinculos y los guardas.... yo lo haria todo contra la bd, al fin y al cabo las entradas multiples a la BD el motor de la misma las controla con hilos. o por lo menos asi es en SQL.

No logro entender por que utilizas esas listas tan exageradamente grandes.

Atentamente,

Juan Manuel Lombana
Medellín - Colombia
En línea


Skeletron


Desconectado Desconectado

Mensajes: 1.731


A long way to go


Ver Perfil WWW
Re: Que tipo de lista dinamica me conviene utilizar?
« Respuesta #8 en: 12 Febrero 2010, 20:24 pm »

Por ésto:
supongamos que 500 hilos estan procesando al mismo tiempo 500 post diferentes de este foro.
Los 500 post, tienen un link a: foro.elhacker.net, ya que es el link que tiene la imagen de logo de arriba de todo...

Los 500 hilos crearian un flujo de 500 entradas al servidor MySQL que lo tengo en un HOSTING.

Pero, si antes de pasarlo directamente a la base de datos, lo meto en una lista donde no hay items repetidos, entonces, los 500 hilos agregarian a la lista aqui en la PC el link foro.elhacker.net, y en realidad, habría solo 1 item en la lista, ya que 499 estuvieron repetidos... al terminar el procesamiento de todos los hilos, otro hilo se encarga de meter todo lo que habia en la lista de links a la base de datos, y solo haría 1 solo INSERT... en vez de 500 :)

Entendiste tio? :D
En línea

Skeletron


Desconectado Desconectado

Mensajes: 1.731


A long way to go


Ver Perfil WWW
Re: Que tipo de lista dinamica me conviene utilizar?
« Respuesta #9 en: 12 Febrero 2010, 20:42 pm »

Por lo que veo:
Código
  1. Dim lista As New Dictionary(Of String, String)
  2.        lista.Add("noel", "noel")
  3.        lista.Add("noel", "asdasd")
  4.        lista.Add("asd", "noel")
  5.        lista.Add("noel", "noel")

Al ingresar la 2º entrada, con la misma clave, da un ArgumentException.
Tardó mucho en "avisarme" el depurador del error (como 1 segundo)...
Si tarda mucho, tendria que seguir con el "if not lista.Contains then lista.add()"

Que me recomiendas Manu?
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
lista con matriz dinamica
Programación C/C++
L·Storm! 2 4,043 Último mensaje 3 Agosto 2011, 03:03 am
por L·Storm!
Ayuda Con Lista Dinámica en PHP Según Consulta SQL
PHP
ZedGe 1 2,159 Último mensaje 19 Julio 2012, 15:47 pm
por Shell Root
¿Qué base de datos me conviene utilizar?
Java
Flamethrower 4 3,082 Último mensaje 1 Octubre 2013, 10:04 am
por Flamethrower
Razones por las que conviene dejar de utilizar Windows XP
Windows
wolfbcn 2 2,256 Último mensaje 20 Octubre 2013, 13:12 pm
por ccrunch
¿Que es más eficiente, utilizar array o memoria dinámica? [C] « 1 2 »
Programación C/C++
NOB2014 13 5,683 Último mensaje 5 Mayo 2016, 17:37 pm
por Eternal Idol
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines