2011-07-07 36 views
5

Estoy haciendo una aplicación de formulario C# win (VS2010, .NET4) que utiliza un temporizador, mi intervalo es 1s, rastrear administrador de tareas y parece que el uso de memoria (el valor escrito delante del nombre de la aplicación en la pestaña de proceso del administrador de tareas) ¡aumenta en cada intervalo! No hago nada especial en el evento tick del temporizador, solo aumenta una variable entera y la muestra en una etiqueta.El temporizador aumenta el uso de memoria en la aplicación C#

¿Es normal? ¿Debo preocuparme por este problema de memoria? Voy a ejecutar este programa en mi servidor (a través del escritorio remoto), ¿causaría algún problema a mi servidor? Se quedaría sin memoria? Uso el temporizador de la caja de herramientas de VS.

+2

¿Puedes publicar algún código sobre cómo invocar el temporizador y qué hace el temporizador en su evento 'ElapsedEventHandler'? – Grambot

+0

¿Intentó ejecutar el 'Profiler' y ver si este es realmente el problema? –

Respuesta

6

Tomemos el siguiente ejemplo que actualiza una etiqueta a cada segundo con la hora actual:

var timer = new Timer 
{ 
    Interval = 1000, 
}; 
timer.Tick += (s, evt) => 
{ 
    label1.Text = DateTime.Now.ToLongTimeString(); 
}; 
timer.Start(); 

Si usted tiene un código como éste no debería estar preocupado por el uso de memoria. El recolector de basura podría ejecutarse en cualquier momento para liberar memoria. Es solo que no puedes determinar cuándo sucede esto.

+0

+1 en el comentario de Darin. Mientras no haga nada para aferrarse a la memoria a largo plazo, debería estar bien. El GC lo limpiará si lo necesita. En cada tic, creará una nueva instancia de cadena para el texto de la etiqueta y nuevos argumentos de evento en lo mínimo. Estos deben reciclarse cuando sea necesario por el CLR y no valen la pena preocuparse. –

1

Sólo para la depuración, trate de forzar una recolección de basura mediante la ejecución de

GC.Collect(); 

Su uso de la memoria debe volver a bajar a aproximadamente donde estaba. Por cierto, puedes hacer esto en el depurador evaluando esa expresión en el reloj rápido.

Cuestiones relacionadas