color cambiar borde c# performance textbox

c# - cambiar - ¿Hay alguna manera de acelerar la visualización de una gran cantidad de texto en un cuadro de texto de winforms?



cambiar el color del borde de un textbox c# (7)

Creo que solo hay una forma: crear tu propio control (o tal vez uno) para mostrar partes pequeñas del texto (como en el administrador lejano, cuando abras archivos extremadamente grandes) en tu caja.

Usted define una "ventana", por ejemplo, 500 letras y cuando usa la barra de desplazamiento para cambiar de posición, cambia el cuerpo de su cuadro de texto y muestra otra parte del texto.

¿Hay alguna manera de acelerar la visualización de una gran cantidad de texto en un cuadro de texto de winforms? Mi aplicación lee un archivo (que puede ser tan grande como 20 MB) y luego lo muestra en un cuadro de texto (TextBoxX.Text = fileText;).

El proceso de visualización del texto es extremadamente lento, a veces lleva unos minutos. El problema es que esta aplicación está diseñada para mostrar una gran cantidad de texto en un archivo, de forma rápida para el usuario.

¿Hay alguna manera de hacer esto más rápido? Tal vez usar algún tipo de almacenamiento en caché?


La solución con un cambio mínimo en el código será leer todo el contenido del archivo en una variable, luego agregar "fragmentos" de los contenidos al cuadro de texto en un bucle que llama a Application.DoEvents () en cada iteración.

Puede mostrar el mensaje "Cargando, espere ..." mientras se está cargando, la llamada de DoEvents asegurará que su aplicación no se "congelará" mientras tanto.


Creo que un archivo de 20Mb tendría un retraso visible incluso cuando se abre a través del bloc de notas.

Agregando a la sugerencia sobre la lectura de fragmentos de datos (que es la mejor opción para grandes datos ... como su probado en descargas web).

puede abrir el archivo de texto en modo lectura como una secuencia de archivos ... y luego leer 1 MB o menos de contenido de bytes en un bucle ... y agregar el contenido al cuadro de texto.

psuedocode:

while (no al final del archivo) {string content = lee 1024 * 1024 bytes de la secuencia ... conviértalo en codificación ascii.

textbox.text + = contenido

}



La propiedad Text es mala si le gusta poner mucho texto en un TextBox . En su lugar, debe leer el archivo en fragmentos y agregarlos utilizando la función AppendText() .

Si va más allá y coloca el proceso de lectura de archivos en un BackgroundWorker que lee el archivo línea por línea y luego informa cada línea en ReportProgress, puede implementar allí el AppendText () y debería hacer todo mucho más uniformemente.

Actualizar

Después de algunas codificaciones y pruebas tengo que admitir que el enfoque descrito anteriormente suena bien, pero el TextBox necesita tanto tiempo de renderizado después de cada AppendText() que esto simplemente no funciona.

Pero si no tienes problemas con el uso de controles de terceros, deberías echarle un vistazo a Scintilla.Net . No tiene problemas con los archivos de texto grandes y funciona realmente mejor en estos casos.


Habiendo encontrado este problema yo mismo, otra solución posible es usar un RichTextBox. En contra de lo intuitivo, considerando cuánto más puede manejar en comparación con un TextBox normal, establecer la propiedad Text de un RichTextBox en una cadena muy grande es prácticamente instantáneo.


Sé que esta pregunta es antigua en este momento, pero me gustaría agregar información que considero que puede ser útil para otros.

Si configura WordWrap = false, el rendimiento mejorará drásticamente en algunos casos. Todavía se ajustará a las líneas largas cuando se alcanza un límite máximo. Probé un texto de 90K de largo que incluía una larga porción de datos de Base64, y la respuesta cambió de 16 segundos a 2 segundos.