Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Eleкtro

#8271
Cita de: Novlucker en  7 Agosto 2013, 20:31 PMYo creo que el problema está no en la función, sino en ejecutar esa función constantemente tan rápido. Se crean más datos de los que se alcanzan a liberar.

Lo que dices es muy lógico, es lo primero que se llega a pensar, puede que si que quizás en 50 ms se generen más datos de los que se pueden liberar, pero además de eso estoy seguro de que hay una fuga en esa función, y la prueba definitiva la di al principio, con este code:


Código (vbnet) [Seleccionar]
   Public Class Form1
   
      Dim isbinded As Boolean = False
      Dim Winamp As clsWACC = New clsWACC
      Dim WithEvents mytimer As New Timer With {.Interval = 50, .Enabled = True}
   
      Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles mytimer.Tick
          isbinded = Winamp.Bind()
          ' Label1.Text = isbinded
          ' isbinded = Nothing
      End Sub
   
   End Class


Símplemente el Test consiste en crear una APP con ese código (y adjuntar la dll de la función Bind claro xD).

Repito que si uso un Timer de 10 segundos (o 20, o los que sean) la RAM sigue subiendo progresívamente, solo que se generarán los bytes mucho más lento porque el timer es más lento así que hay que dejar la app un buen rato corriendo para apreciar el aumentado del consumo de RAM, pero en fín yo creo que en 10-20 segundos el GC tiene tiempo de liberar...

Saludos!
#8272
Hola

Te has debido confundir al decir que los nombres contienen los caracteres "/" y "\" ya que son caracteres prohibidos por Windows, no pueden contenerlos.

Cita de: binario010101 en  7 Agosto 2013, 20:02 PMquiero un bat u otro tipo ce archivo que me renombre todos los archivos eliminando los simbolos y colocando todas las letras en minuscula y la primera letra de las palabras en mayusculas.

Quieres y pides, ¿Pero has intentado hacerlo por ti mismo?, ¿Donde está el código?.

Ya que dejas libre la elección del lenguaje entonces yo te propongo VisualBasicScript porque es soportado natívamente por Windows, ya que Batch es fácil pero muy lento para estas cosas y además se queda corto en características obligando a escribir mucho código de más el cual se podría hacer de forma mucho más simple en cualquier otro lenguaje,
de todas formas si prefieres hacerlo en Batch puedes esperar la respuesta de algún otro Batchero o usar el buscador del foro donde encontrarás esta misma pregunta repetida 1000 veces con soluciones mías y de otros compañeros.


Te doy la mitad del trabajo hecho, la parte fácil de listar los archivos y renombrarlos puedes intentar hacerlo por ti mismo documentándote con ejemplos aquí -> Top Secret

Código (vb) [Seleccionar]
str = "LA_++L+UC+HA_P+OR_EL_AMOR"
str = FormatString(str)      ' Llamamos a la función que formatea el String.
str = ConvertToWordCase(str) ' Llamamos a la función que convierte el String a ProperCase.
Wscript.Echo str             ' Mostramos el String.
Wscript.Quit()               ' Terminamos la ejecución del script.

' Funcs:
' ------
Function FormatString(ByVal String)
String = replace(String, "+","")  ' Reemplazo el caracter "+" por NADA.
String = replace(String, "_"," ") ' Reemplazo el caracter "_" por ESPACIO.
FormatString    = String          ' Devuelvo el String formateado.
End Function

Function ConvertToWordCase(ByVal String)
words = split(String," ") ' Parto el String en varios tokens delimitados por el caracter ESPACIO y lo guardo en un Array.

For i = 0 to ubound(words) ' Recorro cada valor del Array, es decir, cada palabra.
' Convierto la primera letra a UpperCase.
words(i) = ucase(left(words(i),1)) _
& lcase(mid(words(i),2)) ' Y convierto las demás letras a LowerCase.
Next ' Prosigo con la siguiente palabra.

ConvertToWordCase = join(words," ") ' Junto el Array (Lo convierto a String) y lo devuelvo.
End Function


Output:
La Lucha Por El Amor


PD: Si muestras algún intento de proseguir con el código de arriba no tendré ningún inconveniente en ayudarte a completarlo.

Saludos!
#8273
Cita de: Novlucker en  7 Agosto 2013, 19:39 PMPero en principio te puedes fijar si tiene un evento, solo es poner punto en el nombre de instancia de clase y buscar el que tiene un "rayito" :xD
Si pero si el evento fuese privado por cualquier motivo pues no me iba a salir en el intellisense, es que en la class hay muchos "Tests" como cosas de prueba y cosas por mejorar, no está del todo perfeccionado así que tenía que usar el buscador de la IDE para examinar la class a fondo xD.


Citar¿No hay un evento en esa clase para detectar el cambio de estado?
No, ninguno, hay que crear el evento o detectar el estado a lo cutre, mediante condiciones (if's).


En fín Novlucker he seguido tus indicaciones para lo del proceso:

En la class del winamp:
Código (vbnet) [Seleccionar]
   Private Sub waProcess_Exited(ByVal sender As Object, ByVal e As EventArgs) Handles waProcess.Exited
       RaiseEvent WinampExited()
   End Sub


En la class de mi form:
Código (vbnet) [Seleccionar]
   Private Sub Exited() Handles Winamp.WinampExited
       Winamp_IsRunning = False
   End Sub

   Private Sub Monitor_Timer_Tick(sender As Object, e As EventArgs) Handles Monitor_Timer.Tick
       If Not Winamp_IsRunning Then Winamp_IsRunning = Winamp.Bind()
   End sub


Se nota mucho el cambio, gracias, aunque como ya digo la función Bind de esa class tiene algún problema así que por mucho que yo intente perfeccionar estas minucias no va a dejar de subir la RAM xD, aunque ahora he conseguido que suba reálmente muy poco a poco, el consumo de ram hace subidas y bajadas que no me gustan nada, pero bueno parece estar equilibrado, sube un poco y al rato como que el GC hace su trabajo, lo libera y vuelve a bajar el consumo, y vuelve a subir, en fin xD. (Todo esto dejando el proceso en "StandBy")

Saludos
#8274
Cita de: Novlucker en  7 Agosto 2013, 17:17 PM¿Por que ese necesario buscar cada 50 ms la ventana y el proceso de Winamp? Está claro que es algo muy costoso

Aún así ese trozo de código de la Class genera memoria sin cesar, aunque se use un Timer que tickee cada 10 segundos que llame a la función Bind, la cantidad de memoria en ese caso será minima pero al fin y al cabo incesante, hay algo que está mal en ese code.

Cita de: Novlucker en  7 Agosto 2013, 17:55 PM¿No hay un evento en esa clase para detectar el cambio de estado?

En cuanto al proceso por ejemplo. Lo obtienes todas las veces y seteas EnableRaisingEvents en true, lo que hay que hacer es obtener el proceso, setear EnableRaisingEvents en true, suscribirse al evento Exited, y dejar de buscar el proceso. Cuando se dispara el evento Exited, entonces volvemos a buscar.

la Class del Winamp son 2000 o 3000 lineas de código, no me lo he mirado todo, eso es lo próximo que haré y ya te cuento.
#8275
Multimedia / Re: Alternativa a DVDFab
7 Agosto 2013, 17:43 PM
Cita de: topomanuel en  7 Agosto 2013, 17:21 PMSupongo que has probado "Format Factory" y "Avidemux"...

Si, además el Avidemux lo uso desde siempre y solo sirve para convertir videos

También he probado con el StaxRip, pero solo sirve para convertir a otro formato

Cita de: Songoku en  7 Agosto 2013, 17:34 PMPor que no creas un iso con la peli bajada y cargas dicho iso en una unidad virtual para asi poder usar el anydvd?.

Podría decirte que me da mucha pereza crear una ISO de 30-50 GB para luego montarla y comprobar si el AnyDVD u otro programa hace lo que necesito o no lo hace xD... pero es que además de eso, no puedo estar perdiendo el tiempo creando las ISO'S de todos los DBRips que me descargo, si fuese solo para un BR pues vale, pero no es el caso, y se pierde mucho tiempo solo en eso ...sabiendo que hay programas como DVDFab que permiten extraer la película principal desde una carpeta que contenga un BR, y sin reconversión de ningún tipo... tiene que existir otro programa parecido!

Un saludo.
#8277
Cita de: Novlucker en  7 Agosto 2013, 17:17 PM
Hay algo que no entiendo y es ... ¿Por que ese necesario buscar cada 50 ms la ventana y el proceso de Winamp? Está claro que es algo muy costoso

La intención de repetirlo cada 50 ms es para detectar cuando el Winamp está en modo "Pausa" o en "Detenido", o para detectar si el proceso sigue activo o si ya no se está ejecutando el Winamp, si se te ocurre una forma más eficiente plz dímelo.

EDITO:


Para que entiendas lo que hago, tengo algo así:

Código (vbnet) [Seleccionar]
Dim WinampIsRunning = winamp.bind() ' Esto devuelve True si el proceso de Winamp se está ejecutando

If WinampIsRunning then

   if winamp.state = winamp.state.Paused then...
   ' actualizar posición del trackbar, labels, textboxes, etc...

   elseif winamp.state = winamp.state.Paused then...

   elseif winamp.state = winamp.state.Stoped then...

end if


PD: ¿Entonces tu tampoco encuentras el problema en el code de arriba?

Saludos
#8278
Cita de: imoen en  5 Agosto 2013, 13:27 PMpon cada disco en un alimentador diferente , sin que se doble , me refiero a una conexión directa de la fuente no que del cable salgan dos.

Gracias por la recomendación Imoen pero me es imposible hacer lo que pides, la fuente solo trae 2 alimentadores para conectar un total de 5 dispositivos SATA, luego trae otro alimentador que es para conectar dispositivos IDE's.

Así que tengo 4 HDD's, hay 3 entradas en la fuente, pero solo 2 alimentadores SATA, así que sólo puedo ocupar 2 entradas de la fuente.

Tengo un alimentador conectado al disco principal, y el otro alimentador alimentando (xD) al resto de HDD's.

Ahora el problema es que a veces hay "hangs" en el sistema que duran sobre 30-60 seg en el disco principal, como ya digo esto sucede incluso aunque el resto de HDD's se desconecten de la fuente...

No le doy mucha caña al PC, no sé que puede ser, cualquier otro consejo es bienvenido.

EDITO: He probado a disminuir el performance del disco principal desactivando las opciones de la caché de escritura y el vaciado de caché de escritura, imagino que sabrás que esto vuelve lentísimo a un HDD, pero aún así el problema de los cuelgues temporales persiste. Y por si sirve de algo, dichas opciones siempre las tengo desactivadas en los HDD's secundarios por precaución de pérdida de datos, solo activo la opción de la caché de escritura en el disco principal.

Saludos
#8279
@WarZ0n3 espero impaciente tu ayuda (o la de quien sea xD)

A mi me interesa saber una cosa, para descartar opciones e intentar aislar la raiz del problema...

¿El motivo de un stackoverflow sólo puede ser la recursividad de los metodos? ¿Existen otros motivos que puedan causar un overflow de la pila?

y...bueno, vuelvo al principio, ¿Se puede aumentar el tamaño del stack del main thread?, ví que se podían usar algunos comandos de compilación para aumentar el tamaño del stack de la aplicación, pero iba escaso de tiempo y ya no tengo la información, creo que había que usar la aplicación BinEdit.exe u otra manera era especificar un parámetro "/Stack" en el compilador del framework, ¿Me podeis verificar esto?.

Saludos
#8280
Multimedia / Re: Alternativa a DVDFab
7 Agosto 2013, 16:30 PM
Cita de: topomanuel en  7 Agosto 2013, 16:25 PM"Magic DVD Ripper"

Si lo dices como recomendación te hago saber que ya lo he probado pero no sirve :(.

Si lo dices porque deberiamos intuir que sólamente funcionan con DVD's te equivocas,
DVDFab sel llama DVDFab pero funciona con BD's... al igual que otros programas que he nombrado que se llamana "DVD" pero sirven para BD's también...
...En fín tenía que probarlo todo.

Saludos