Memory Leak en un TextBox de WPF

Llevo tiempo sin escribir y voy a intentar volver a la carga si el trabajo me deja, hoy quisiera comentaros una “fuga de memoria” que se les producía  a unos compañeros míos. El problema se les daba en un TextBox en el que el usuario introducía un montón de información y detectaban que el consumo de memoria se les disparaba.

El problema en este caso es sencillo ya que esta reportado por Microsoft, para que funcione el Undo en el TextBox por dentro implementa una pila Undo Stack en el que va guardando todos los cambios que se producen en el TextBox para que el usuario pueda hacer Undo. Imaginaros la cantidad de memoria que consume esa pila por cada pulsación de tecla, la manera de “solucionarlo” es utilizar la propiedad UndoLimit del TextBox que por defecto viene a –1, aquí indicamos el limite de eventos de Undo que queremos, en este caso el valor por defecto es –1, lo que quiere decir infinito.

Para solucionarlo solo pusimos la propiedad UnLimit con el valor 0 (en este caso nos interesaba que no tuviera Undo)

 

<Application.Resources>  
        <Style TargetType="{x:Type TextBox}"> 
            <Setter Property="UndoLimit" Value="0" /> 
        </Style> 
    </Application.Resources> 

Espero que os ayude y tengais cuidado

3 comentarios sobre “Memory Leak en un TextBox de WPF”

  1. Aún poniendo la propiedad UndoLimit a 0 la memoria consimida crece más rapidamente que la cantidad de texto contenida en el textbox.

    Haciendo una prueba de concepto, poniendo un textbox con un timer que vaya añadiendo texto a dicho textbox periódicamente la memoria de la aplicación llega a 600 MB y el contenido del textbox apenas tiene 20 millones de caracteres…

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *