visual usar texto solo seleccionar programar lectura escribir cuadro como c# winforms textbox

c# - usar - textbox solo lectura vba



Escribir grandes cantidades de texto en un cuadro de texto (3)

Construya su Cadena junto con un StringBuilder , luego conviértalo en una Cadena usando toString() , y asígnelo al cuadro de texto.

Estoy escribiendo un registro de montones y montones de texto formateado en un cuadro de texto en una aplicación de formulario de Windows .net.

Es lento una vez que los datos superan algunos megas. Desde que estoy anexando, la cadena tiene que ser reasignada cada vez, ¿verdad? Solo necesito establecer el valor en el cuadro de texto una vez, pero en mi código estoy haciendo line+=data decenas de miles de veces.

¿Hay una manera más rápida de hacer esto? Tal vez un control diferente? ¿Existe un tipo de cadena de lista enlazado que pueda usar?


StringBuilder no ayudará si el cuadro de texto se agrega incrementalmente, como la salida de registro, por ejemplo.

Pero, si lo anterior es cierto y si las actualizaciones son lo suficientemente frecuentes, puede ser conveniente almacenar en caché algunas actualizaciones y luego agregarlas en un solo paso (en lugar de agregarlas constantemente). Eso te ahorraría muchas reasignaciones de cadenas ... y luego StringBuilder sería útil.

Notas:

  1. Crear un miembro de StringBuilder de clase (_sb)
  2. Comience un temporizador (o use un contador)
  3. Agregar actualizaciones de texto a _sb
  4. Cuando se completen las marcas del temporizador o cierto contador, añádelo y añádelo al cuadro de texto
  5. reiniciar proceso desde # 1

Nadie ha mencionado aún la virtualización, que es realmente la única forma de proporcionar un rendimiento predecible para grandes volúmenes de datos. Incluso usar un StringBuilder y convertirlo en una cadena cada medio segundo será muy lento una vez que el registro sea lo suficientemente grande.

Con la virtualización de datos, solo mantendría los datos necesarios en la memoria (es decir, lo que el usuario puede ver, y tal vez un poco más en cada lado) mientras que el resto se almacenaría en el disco. Los datos antiguos se "desplegarán" en la memoria a medida que ingresen datos nuevos para reemplazarlos.

Para hacer que TextBox aparezca como si tuviera muchos datos, le diría que sí. A medida que el usuario se desplaza, debe reemplazar los datos en el búfer con los datos relevantes de la fuente subyacente (utilizando el acceso aleatorio a archivos). De modo que su UI estaría monitoreando un archivo, no escuchando eventos de registro.

Por supuesto, esto es mucho más trabajo que simplemente usar un StringBuilder , pero pensé que valía la pena mencionarlo por las dudas.