Hoy he descubierto algo que me ha impactado bastante.
Creamos un nuevo WinForm, y lo dejamos EN BLANCO, es decir, sin ningún tipo de código, simplemente el Form1.vb generado por el VS...
Ahora, si compilamos esa aplicación vacía, al mover el mouse sobre el form, sólo esa acción consume unos 8kb cada segundo. (no estoy seguro de si se trata del evento MouseEnter o del MouseMove, o quizás el problema no sea de un Evento y sea otra cosa que desconozco)
Lo más impactante de este experimento es que dicho consumo jamás se llega a liberar!, cuanto más muevo el mouse por el Form, más subre el consumo de RAM, 8 kb cada vez que muevo el mouse por el form, pero ese consumo nunca vuelve a bajar, y esto quiere decir que un Form vacío podría dar un problema de overflow sólamente por mover el mouse por el form!!?¿
¿Como es esto posible?, ¿Cual es la razón?, ¿Que se puede hacer para solucionarlo?, ¿Alguien más se habia dado cuenta de esto antes?.
PD: No se si es un WinForm de C# pasará lo mismo Con un Winform de C# sucede exáctamente lo mismo, lo he testeado con VB.NET, con Framework 4.0 y 4.5.
EDITO:
Con Java es incluso peor, es traumático, al mover el mouse sobre el background de una aplicación vacía la memória aumenta por MB's cada segundo, no por kb's, y no se llega a liberar jamás tampoco, puede pasar de 40 mb a 60 mb en menos de 30 segundos símplemente por mover el mouse por la ventana sin parar, y encima ese consumo no va a bajar nunca, es increible, en fín si que es cierto lo que dicen sobre Java y el consumo de RAM si...
Tengo algunos programas profesionales de terceros desarrollados en C/C++ y al mover el mouse por sus ventanas no sube el consumo en absoluto.
Bueno, ahí dejo el experimento, espero que alguien pueda dejar explicaciones sobre las causas de estos sucesos paranormales, y si se puede evitar de alguna manera ese consumo excesivo OverRideando algún método o... como sea!!.
Saludos.
« Última modificación: 8 Agosto 2013, 10:05 am por EleKtro H@cker »
Probé lo que comentas y si, pasa eso, incluso cambiando opciones de compilación
Saludos
En línea
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD"Hay dos cosas infinitas: el Universo y la estupidez humana. Y de la primera no estoy muy seguro."
Probé lo que comentas y si, pasa eso, incluso cambiando opciones de compilación
Como me gusta oir eso vininiendo de un experto, no estoy loco! xD
Pues lo dicho, y en Java es inclusive peor ya que se dispara el consumo por Megabytes como ya he dicho, pero bueno, Java no me importa.
En otros lares me dicen que haga un research sobre como trabaja la memória en .NET... y yo me pregunto, ¿Que es lo que debo buscar si para empezar no se ni cual es la raiz dle problema, ni tampoco se cual es el problema en si mismo?, ¿Por donde empiezo?, en fín en esos lares me dicen un sin fin de cosas que considero tonterías y se meten conmigo los típicos Trolls pero nadie me dice nada en concreto, mucho listillo y experto pero ninguno sabe decirme algo en concreto! (no lo digo por ti, novlucker)
Cosas como estas ya las sé, pero no me aclaran nada:
· ¿Porque el consumo de memoria aumenta sobre los 8-16 kb progresívamente cada segundo al mover el mouse por un Winform?
Citar
There are messages that trigger for handling mouse movement, etc, which get processed by the form.
(Vale, pero una vez interceptados los messages y raiseados los eventos porque sigue subiendo sin parar?)
· ¿Porque ese aumento de memória no vuelve a disminuir nunca?
Citar
It will. Eventually, you'll see your memory settle down. In C# and VB.Net, the garbage collector doesn't immediately clean up memory (by design), but lets it grow, and will clean up as needed. In general, you'll tend to see .NET applications grow in their memory usage, then drop dramatically, then grow again, then drop, etc. If you have a lot of memory in your system, the "drops" happen infrequently, since a garbage collection is expensive, and there's absolutely no disadvantage to using memory that's not needed elsewhere.
PD: La última respuesta no tiene validez para mi, ya que el experimento demuestra que eso no es cierto en este caso, el GC "no hace nada".
Pero hazlo hasta el extremo a ver si tu pc se cuelga o algo, si no es asi es porque como dice por ahi "el GC lo deja crecer pero cuando es necesario lo borra"
Pero hazlo hasta el extremo a ver si tu pc se cuelga o algo, si no es asi es porque como dice por ahi "el GC lo deja crecer pero cuando es necesario lo borra"
Sip, no se si leiste mi respuesta a eso, ese será mi próximo experimento xD
Dejaré una VM con 64 de ram y WinXP, un script que mueva el mouse sobre el Form, y a ver lo que pasa...
PD: ¿Alguien ha notado mi obsesión por el consumo de RAM? xD, pues si, quiero que mis aplicaciones rocen la perfección... y para que llegue ese día necesito aprender y descifrar acertijos como estos.
¿Te ocurre únicamente en modo de de puración? Porque he probado mis aplicaciones ya compiladas y en depuarión. Al principio se presenta el mismo incremento de memoria, pero no sube más de 500kb.
Las condiciones en las que he realizado la prueba son:
Visual Studio 2010 express Compilación para .NET Framework 4.0
¿Crees que sea problema del VS 2012?
Como te comento, comienza a subir en ambos casos pero en ninguno sube de manera alarmante. En modo de depuración se incrementa más el uso de memoria.