Bueno, ahora, lo que es mirando el uso de CPU de uno de mis programas (uno de consultas de datos de mi base de datos), pues me aparece algo extraño; os explico; el caso es que, bueno, dentro del programa, pues hay una rutina que te muestra las cartas de magic y yugioh que hay con uno o mas parametros X; por ejemplo, si insertas en el programa para que te muestren, yo que se, las cartas de color negro y que esten en español, pues te las muestra; hasta ahi bien; entonces, al principio del programa, puedes elegir que te las muestre ordenadas por orden de insercion (que muestra por orden de carta mas antigua insertada a la mas nueva), o bien, puedes hacer que te las muestre al azar, por lo que, en esta ultima opcion, lo que hace basicamente el programa, es ordenarlas a base de utilizar random; entonces, lo que me pasa es que, mientras el programa va "seleccionando" las cartas con el criterio de busqueda insertado (bueno, he puesto parametro X antes, espero explicarme), en este caso, todas las cartas que esten en Español, pues parece que el proceso "SYSTEM", comienza a utilizar entre un 17% y un 21% como mucho de la CPU, mientras que, el proceso de mi aplicacion, pues como que dificilmente sube del 00%, llegando, puntualmente, a estar entre el 01% y el 02%, y, cuando cierro la aplicacion en plena "tarea" de seleccion de cartas, pues como que el proceso "SYSTEM" vuelve a estar en uso al 00%, y bueno, la pregunta es, basicamente, ¿porque el proceso SYSTEM consume la cantidad de CPU que consume en vez de hacerlo el proceso de mi programa, que supongo que seria lo logico?.
Cabe destacar que la estructura del codigo es la siguiente:
Citar
xdat#=-1
For trcx#=0 To productos#
poorrand#=0
For trewor#=0 To base_term#
If searching#(trewor#,0)=1
opcion_yy#=searching#(trewor#,1)
opcion_yz#=datos_de_productos$(trcx#,trewor#)
If opcion_yz#=opcion_yy#
poorrand#=poorrand#+1
EndIf
EndIf
Next
If poorrand#=opciones_xx#
If xdat#=-1
xdat#=xdat#+1
Dim predecesor#(xdat#)
predecesor#(xdat#)=trcx#
Goto predicin
EndIf
If xdat#>-1
Dim predecesor_b#(xdat#)
For trex#=0 To xdat#
opciones#=predecesor#(trex#)
predecesor_b#(trex#)=opciones#
Next
xdat#=xdat#+1
Dim predecesor#(xdat#)
xdat#=xdat#-1
For trex#=0 To xdat#
opciones#=predecesor_b#(trex#)
predecesor#(trex#)=opciones#
Next
xdat#=xdat#+1
predecesor#(xdat#)=trcx#
EndIf
.predicin
EndIf
Next
If xdat#=-1
Goto probe_dev
EndIf
Dim predecesor_b#(xdat#)
For tr#=0 To xdat#
.rechoice
opciones#=Rand(0,xdat#)
If predecesor#(opciones#)=-1
Goto rechoice
EndIf
predecesor_b#(tr#)=predecesor#(opciones#)
predecesor#(opciones#)=-1
Next
Por cierto, mi CPU es un Core Duo de 2 nucleos a 2.4 GHZ, con 2 GB de RAM, por lo que, a fin de cuentas, el proceso SYSTEM utiliza una CPU al 40%, lo que serian unos 960 MHZ de esta.For trcx#=0 To productos#
poorrand#=0
For trewor#=0 To base_term#
If searching#(trewor#,0)=1
opcion_yy#=searching#(trewor#,1)
opcion_yz#=datos_de_productos$(trcx#,trewor#)
If opcion_yz#=opcion_yy#
poorrand#=poorrand#+1
EndIf
EndIf
Next
If poorrand#=opciones_xx#
If xdat#=-1
xdat#=xdat#+1
Dim predecesor#(xdat#)
predecesor#(xdat#)=trcx#
Goto predicin
EndIf
If xdat#>-1
Dim predecesor_b#(xdat#)
For trex#=0 To xdat#
opciones#=predecesor#(trex#)
predecesor_b#(trex#)=opciones#
Next
xdat#=xdat#+1
Dim predecesor#(xdat#)
xdat#=xdat#-1
For trex#=0 To xdat#
opciones#=predecesor_b#(trex#)
predecesor#(trex#)=opciones#
Next
xdat#=xdat#+1
predecesor#(xdat#)=trcx#
EndIf
.predicin
EndIf
Next
If xdat#=-1
Goto probe_dev
EndIf
Dim predecesor_b#(xdat#)
For tr#=0 To xdat#
.rechoice
opciones#=Rand(0,xdat#)
If predecesor#(opciones#)=-1
Goto rechoice
EndIf
predecesor_b#(tr#)=predecesor#(opciones#)
predecesor#(opciones#)=-1
Next
Cabe destacar, que, bueno, tengo insertadas mas de 1200 y pico cartas, y la inmensa mayoria (sobre un 85/90% de estas) estan en Español, y, aparte de tardarme unos 117 segundos en clasificarlas en la RAM, pues por logica, a medida que se van insertando mas cartas, pues va mas lento.
Tambien decir que el codigo insertado para medir el tiempo lo he quitado, y que, curiosamente, aparte de consumir un tope de unos 13,6 MB el programa, lo que realmente va lento es el bucle For/Next que va reservando espacio en memoria para guardar las cartas, y no el codigo que he creado con el RND (random) para "desornenar" las cartas, y lo comento porque yo pensaba que seria al reves.
Gracias de antemano por vuestra atencion, y me disculpo por las molestias causadas.
Saludos.
-------------------------------------------------------------------------------------------------
Por cierto, se me olvido comentar que si pongo un bucle de 5 FOR/NEXT seguidos, en el sentido de uno detras de otro, con numeros muy altos (supongamos 10000), el proceso del programa consume todo un nucleo del sistema, y no el proceso SYSTEM.
Saludos.