Cómo mejorar el rendimiento de la concatenación de cadenas en Visual Basic .NET o en Visual Basic 2005

Seleccione idioma Seleccione idioma
Id. de artículo: 306821 - Ver los productos a los que se aplica este artículo
Este artículo se publicó anteriormente con el número E306821
Para obtener una versión de este artículo para Microsoft Visual C# .NET, vea 306822.
Expandir todo | Contraer todo

En esta página

Resumen

En este artículo se demuestran las ventajas de utilizar la clase StringBuilder frente a las técnicas de concatenación tradicionales. Las cadenas de .NET Framework son invariables (es decir, el texto al que se hace referencia es de sólo lectura después de la asignación inicial). Esto proporciona muchas ventajas de rendimiento y plantea ciertos desafíos al programador que está acostumbrado a las versiones anteriores de Visual Basic. Una técnica común de concatenación de cadenas de Visual Basic 6.0 puede ser hasta 1.000 veces más rápida que el operador &, pero esta técnica no proporciona ventajas de rendimiento en Visual Basic .NET o en Visual Basic 2005.

Descripción de cadenas de .NET Framework

Una técnica para mejorar la concatenación de cadenas en Visual Basic 6.0 y versiones anteriores consistía en asignar un búfer de cadenas y utilizar la instrucción Mid para copiar los datos de cadena en el búfer. Esta técnica se demuestra en el siguiente artículo de Microsoft Knowledge Base:
170964 Cómo mejorar el rendimiento de la concatenación de cadenas
En .NET Framework, una cadena es invariable; no se puede modificar in situ, a diferencia de las cadenas en versiones anteriores de Visual Basic. En su lugar, las modificaciones a una cadena en .NET Framework hacen que se asigne una nueva cadena. Visual Basic .NET sigue incluyendo una instrucción Mid, pero su implementación utiliza la concatenación para generar la nueva cadena en lugar de modificar el contenido de la cadena in situ. En consecuencia, la técnica que se describe en 170964 no mejora el rendimiento de la concatenación de cadenas en Visual Basic .NET.

.NET Framework incluye una clase a StringBuilder optimizada para la concatenación de cadenas. Proporciona las mismas ventajas que utilizar la instrucción Mid en versiones anteriores de Visual Basic, así como aumento automático del tamaño del búfer (si es necesario) y seguimiento automático de la longitud. La aplicación de ejemplo de este artículo demuestra el uso de la clase StringBuilder y sirve para comparar el rendimiento con la concatenación.

Generar y ejecutar una aplicación de demostración

  1. Inicie Visual Studio .NET o Visual Studio 2005 y cree una nueva aplicación de consola de Visual Basic.
  2. El siguiente código utiliza el operador de concatenación &= y la clase StringBuilder para temporizar 5.000 concatenaciones de 30 caracteres cada una. Agregue este código al procedimiento Sub Main.
    Const sLen = 30, Loops = 5000 Dim sTime, eTime As DateTime, I As Integer Dim sSource As New String("X"c, sLen) Dim sDest As String = "" ' ' Time string concatenation ' sTime = Now For I = 1 To Loops sDest &= sSource Next I eTime = Now Console.WriteLine("Concatenation took " & eTime.Subtract(sTime).TotalSeconds & " seconds.") ' ' Time StringBuilder ' sTime = Now ' Inicialice un búfer StringBuilder algo mayor de ' lo que espera necesitar. Dim sb As New Text.StringBuilder(CInt(sLen * Loops * 1.1)) For I = 1 To Loops sb.Append(sSource) Next I sDest = sb.ToString() eTime = Now Console.WriteLine("String Builder took " & eTime.Subtract(sTime).TotalSeconds & " seconds.") ' ' Haga que la ventana de la consola permanezca abierta ' para poder ver los resultados cuando ejecute la aplicación desde el IDE. ' Console.WriteLine() Console.Write("Press ENTER to finish ... ") Console.Read()
    					
  3. Guarde la aplicación y presione la tecla F5 para compilar y ejecutar la aplicación. Las ventanas de la consola deben mostrar un resultado similar a lo siguiente:
    Concatenation took 6.208928 seconds. String Builder took 0 seconds.
    
    Press ENTER to finish ...
    						
  4. Presione ENTRAR para detener la ejecución de la aplicación y cerrar la ventana Consola.

Solucionar problemas

  • Si el entorno admite la transferencia de datos, por ejemplo en un formulario Web Forms de ASPX o la aplicación escribe los datos en disco, considere la posibilidad de evitar la sobrecarga del búfer de concatenación o de StringBuilder, y escriba los datos directamente en la secuencia a través del método Response.Write o el método apropiado para la secuencia en cuestión.
  • Intente reutilizar la clase StringBuilder existente en lugar de reasignarla cada vez que necesite una. Esto limita el crecimiento del montón y reduce la recolección de elementos no utilizados. En cualquier caso, el uso de la clase StringBuilder hace un uso más eficiente del montón que el uso del operador &.

Referencias

La clase StringBuilder contiene muchos otros métodos para la manipulación de cadenas in situ que no se describen en este artículo. Para obtener más información al respecto, busque "StringBuilder" en la Ayuda en pantalla.

Propiedades

Id. de artículo: 306821 - Última revisión: martes, 23 de enero de 2007 - Versión: 4.4
La información de este artículo se refiere a:
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic 2005
Palabras clave: 
kbvs2005swept kbvs2005applies kbhowtomaster KB306821

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com