Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-06-2005
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Rendimiento TStringList

Hola foristas...

tengo una unidad con varias lineas de código (unas 600) que tiene como finalidad realizar tratamientos para playlist.

Para hacerla fácil he definido una Clase que hace todo el trabajo, y me he valido del TStringList ya que éste ofrece el LoadFromFile, el SaveToFile, el Add y Delete. Y esto me permitió formar un archivo en donde guardo una lista de temas con una cierta estructura.

Dicha estructura guarda en una línea toda la info que se requiere (Artista, Tema, Duración, Género, Album, Directorio) para cada tema.
Anda bien, bastante bien, según las pruebas que he realizado.

Ahora me he preguntado si es lo más conveniente ya que para listas sumamente grandes (en los miles) tal vez sea un desperdicio de memoria. La máxima prueba que he realizado fue con una lista de 1500 temas y no se siente diferencia alguna en el rendimiento, ¿cuál será el límite que es capaz de soportar el TStringList sin que afecte en gran medida su rendimiento?

Entonces mi duda es si mi método es lo más conveniente, en cuanto a rendimiento. Es lo más fácil que se me ha ocurrido, a lo mejor alguien tiene otra manera de hacerlo.
Adjunto el código por si a alguien le interesa.
Archivos Adjuntos
Tipo de Archivo: zip UPlayList.zip (6,7 KB, 73 visitas)
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #2  
Antiguo 07-06-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Puntos fuertes
Me ha gustado mucho tu unidad, muy muy bien organizada para mi gusto, y se lee sin mayor complicación. En todo momento se sabe lo que se está haciendo, debido a los intuitivos nombres que le has puesto a los métodos. Amén de usar código claro, conciso e indentado (no es mi forma de indentar... pero es clara).


Críticas (como no, de eso se trata )
Quizás me desconcertó unos milisegundos una variable "i" de tipo Boolean jejeje, y las constantes infoX que podrian haberse llamado D_Artista; D_Tema, etc.

¿Mejoras?

Una mejora podría ser implementar el método QuickSort, usarlo si la lista contiene más de X elementos, y si no, usar el método burbuja mejorado que usas actualmente.

Un saludo
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #3  
Antiguo 07-06-2005
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Lightbulb gracias

Cita:
Empezado por Lepe
Una mejora podría ser implementar el método QuickSort, usarlo si la lista contiene más de X elementos, y si no, usar el método burbuja mejorado que usas actualmente.
Pensé en poner dicho método pero tengo entendido que puede llegar a requerir mucha memoria...

Gracias por el comentario que emitiste...

Pero...sigo sin entender cómo podría saber que tan alto pueda ser el rendimiento del TStringList. Me gustaría saber que opinan o cómo lo harían algunos foristas.

¿Es realmente mi código el más adecuado?¿Que tanto puede resolverve las cosas el TStringList?
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #4  
Antiguo 12-06-2005
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Cita:
Empezado por Delphius
Pero...sigo sin entender cómo podría saber que tan alto pueda ser el rendimiento del TStringList. Me gustaría saber que opinan o cómo lo harían algunos foristas.

¿Es realmente mi código el más adecuado?¿Que tanto puede resolverve las cosas el TStringList?
Disculpen que insista pero es algo que todavía me tiene algo preocupado. A lo mejor no me hice explicar bien: mi duda es que tan bien podrá resultar el uso del TStringList para manejar la lista. ¿Tendrá un límite, en donde la cantidad de temas sea no conveniente superar? Para mis 1500 temas no hay drama... pero a lo mejor para alguien que tiene una lista considerablemente mayor (conozco gente que ha llegado a tener 7000) el rendimiento (en cuanto a memoria usada, velocidad, etc) pueda bajar tanto en donde su uso no es idóneo.
¿Alguien tiene idea de cuánto pueda ser esa cantidad?
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #5  
Antiguo 12-06-2005
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
y por qué no haces tú mismo la prueba y así puedes valorarlo según te resulte. Puedes crear un simple bucle y añadirle varios miles de entradas e ir probando cada vez con algunos miles más, así poco a poco, e ir anotando memoria consumida, tiempos, etc.

Al menos es eso lo que yo haría, probarlo hasta que sea inoperativo y así saber con exactitud hasta cuanto "aguanta".
Responder Con Cita
  #6  
Antiguo 12-06-2005
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Cita:
Empezado por Casimiro Notevi
y por qué no haces tú mismo la prueba
Casi todos los programadores pensamos que nuestros codigos estan bien hasta que venga un usuario y lo explota. Pasa casi siempre.

Creo que si Delphius estan pidiendo opinion es porque ya lo ha probado hasta los limites que entiende.
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
  #7  
Antiguo 12-06-2005
Mick Mick is offline
Miembro
 
Registrado: may 2003
Posts: 405
Poder: 21
Mick Va por buen camino
En cuestion de rendimiento hay dos cosas a tener en cuenta, por un lado la cantidad de memoria que se utilice, y por otro la velocidad de acceso a los datos.

Uso de memoria:

Un TStringList en principio no tiene limitacion de memoria, el limite lo pone la arquitectura de los PCs y la cantidad de memoria ram que tenga el equipo, puedes guardar hasta 2^30 elementos, unos mil millones aproximadamente.

Puedes hacer tu mismo una estimacion de la memoria RAM que se necesitara, poniendote en el peor caso, por ejemplo para 10.000 elementos , si suponemos que cada elemento tuviese de 255 caracteres de largo, necesitariamos mas o menos: sobre (255+16)*10.000 = 2.5 megas de RAM.

Velocidad de acceso:

Si se necesitan hacer busquedas no exactas sobre todos los elementos, es necesario recorrer la lista entera, esta es la forma mas lenta de acceso, pero para unos pocos miles de elementos normalmente es casi instantaneo.

Para una busqueda exacta puedes mantener la lista ordenada, (El objeto TSTringList se puede mantener ordenado automaticamente por si mismo, ya que implementa internamente el algoritmo quicksort).

En definitiva segun mi opinion:

Si los elementos son unos pocos miles, un stringlist puede ser mas que suficiente, si los elementos fuesen cientos de miles o millones, ya no nos cabrian todos en memoria ademas de que las busquedas se harian mas lentas, y en ese caso necesitariamos utilizar una base de datos o hacerse un mini gestor de base de datos propio para no tener cargada a memoria toda la informacion.

Saludos
Miguel
Responder Con Cita
  #8  
Antiguo 13-06-2005
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Gracias...

Cita:
Empezado por vtdeleon
Casi todos los programadores pensamos que nuestros codigos estan bien hasta que venga un usuario y lo explota. Pasa casi siempre.

Creo que si Delphius estan pidiendo opinion es porque ya lo ha probado hasta los limites que entiende.
Es cierto... podría hacer yo mismo la prueba, es más la hice con 1500 temas.
vtdeleon ha dicho algo cierto: para uno es algo perfecto pero para otros no lo es y por eso que pedí una opinión al respecto.

Otra cosa, yo pregunté cómo o de que otra manera se podría hacer otro estudio de rendimiento y entiendo perfectamente que dependerá en gran medida del hard que posea el equipo. Tal cual lo dice Mick:
Cita:
Empezado por Mick
En cuestion de rendimiento hay dos cosas a tener en cuenta, por un lado la cantidad de memoria que se utilice, y por otro la velocidad de acceso a los datos.
Gracias Mick, me has aportado información como para hacer una evaluación de lo fiable que puede ser mi algoritmo. No se si habrás leído el código que he adjuntado, pero te digo que lamentablemente para las funcionalidades que está pensado el objeto es NECESARIO hacer la lectura elemento por elemento. Y esto inclina enormente la balanza.

Hasta el momento he llegado a la conclusión de que el TStringList (para mi propuesta) puede presentar falencias al llegar al 50% de la memoria que disponga la PC del usuario. Para esto tuve en cuenta que:
1. Es necesario la operación de lectura elemento por elemento (a excepción de algunas funciones).
2. Es poco probable de que tenga unicamente a mi aplicación ejecutándose solamente.

Hasta el momento he llegado a eso... y creo que el uso del TStringList puede serme util siempre y cuando el usuario no pretenda forzar mi aplicación.
Si pudiese tener una "medida" que sea independiente del hard a lo mejor la conclusión sería otra.
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 10:12:50.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi