Estoy usando un cuadro de texto de líneas múltiples en C# para simplemente registrar algo de información de rastreo. Simplemente uso AppendText("text-goes-here\r\n")
ya que necesito agregar líneas.Problema con el uso de memoria de cuadro de texto multilínea C#
He dejado que este programa se ejecute durante unos días (con un montón de rastreo activo) y noté que estaba usando mucha memoria. En pocas palabras, parece que incluso con el valor máximo de algo muy pequeño (256), el contenido del cuadro de texto sigue expandiéndose.
Pensé que funcionaba como un FIFO (tirando el texto más antiguo que excede el tamaño máximo). No lo hace, simplemente sigue aumentando de tamaño. Esta es aparentemente la causa de mi pérdida de memoria. ¿Alguien sabe lo que estoy haciendo mal?
añadido unas pocas horas después de la pregunta inicial ... Ok, probé el código se sugiere a continuación. Para probarlo rápidamente, simplemente agregué un temporizador a mi aplicación y desde ese tic del temporizador ahora llamo a un método que básicamente hace lo mismo que el siguiente código. La tasa de tics es alta para que pueda observar el uso de memoria del proceso y determinar rápidamente si hay una fuga. No hubo. Eso era bueno; sin embargo, puse esto en mi aplicación y el uso de la memoria no cambió (aún goteaba). Eso parece implicar que tengo una fuga en otra parte :-(Sin embargo, si simplemente agrego una devolución en la parte superior de ese método, el uso vuelve a ser estable. ¿Alguna idea sobre esto? El código invocado por el temporizador-marcado No acumulo memoria, pero mi código real (el mismo método) sí. La diferencia es que estoy llamando al método desde una variedad de lugares diferentes en el código real. ¿Puede el contexto de la llamada afectar esto de alguna manera? (tenga en cuenta, si no lo está) ya es obvio, no soy un experto .NET de ninguna manera) ...
¿Hay alguna razón por la que está tratando de usar un cuadro de texto y no lo registra en una base de datos o lo escribe en un registro de eventos? – Thyamine
Este es un problema común en ASP.NET, ya que los cuadros de texto multilínea se representan en el lado del cliente como un control HTML 'TEXTAREA', que felizmente ignora propiedades como maxlength. Supongo que esto es winforms, sin embargo? – MusiGenesis
Thyamine .. el motivo es la simplicidad. Solo quiero poder ver algún rastro de tiempo de ejecución de un programa; y esperaba que AppendText() actuara como un FIFO. –