VB .NET - StringBuilder : tratando Strings de modo mais eficiente.
Já tivemos a oportunidade de falar um pouco sobre Strings no VB.NET no artigo - VB.NET - Strings um novo enfoque ; neste artigo vou falar um pouco da classe StringBuilder , suas propriedades e como usá-la para otimizar o tratamento de Strings , afinal , creio que as Strings sejam uma das classes mais usadas no VB.NET.
Toda vez que você usa um dos métodos da classe System.String , você cria um novo objeto string na memória , o qual requer uma nova alocação de espaço para o objeto criado. Em situações onde você precisa realizar repetidas modificações em uma string a sobrecarga de ter que criar um novo objeto String pode lhe trazer problemas. Nestas situações é que entra a classe StringBuilder , ela faz parte do namespace System.Text ; então a classe System.Text.StringBuilder pode ser usada para modificar uma string sem que seja necessário criar um novo objeto. Por exemplo a concatenação de strings em um loop pode ser uma destas situações onde o uso de StringBuilder pode melhorar muito o desempenho do seu código.
Podemos pensar no objeto StringBuilder como um buffer dinâmico que pode conter uma String com a habilidade de aumentar seu tamanho a partir do zero até a capacidade final do buffer. O tamanho do buffer vai crescendo a medida que o tamanho dos caracteres presentes no objeto StringBuilder vai aumentando.
Podemos definir um número máximo de caracteres que o objeto StringBuilder pode manipular . Este valor é chamado de capacidade do objeto e não pode ser confundido com o comprimento da string contida no objeto atual. Por exemplo podemos criar um instância da classe StringBuilder com a string "Macoratti" que possui um tamanho de 9 , e ao mesmo tempo podemos definir a capacidade máxima do objeto como sendo de 25. Ao modificar o objeto StringBuilder , ele não faz a realocação de tamanho até que a capacidade máxima seja alcançada ; quando isto ocorre novo espaço é alocado automaticamente e a capacidade dobra de tamanho. Vejamos como podemos criar um objeto StringBuilder :
A classe System.Text.StringBuilder obtém uma melhor performance no tratamento de strings justamente porque ela aloca o espaço inicial quando uma instância do objeto é criada. O tamanho padrão inicial é de 16 caracteres na memória quando usamos o construtor da classe sem argumento algum:
Ex:
Dim sb As
New System.Text.StringBuilder()
O tamanho de um objeto StringBuilder pode ser obtido pela propriedade Capacity. Assim para obter o tamanho do objeto sb acima fazermos:
Ex:
System.Console.WriteLine(sb.Capacity)
' irá imprimir 16 , que é o tamanho padrão
inicial
Para alterar a capacidade do objeto
StringBuilder também usamos a propriedade
Capacity . Para alterar o tamanho do objeto StringBuilder acima, fazemos :
Ex:
sb.
Capacity
= 25 - aumenta para 25 caracteres a capacidade máxima do
objeto sb
Os métodos abaixo podem ser usados para modificar o conteúdo de um objeto StringBuilder:
Nome do Método | Uso |
---|---|
|
Anexa uma informação no
final do objeto StringBuilder atual. Ex:( Anexa a frase - Que lindo dia
a string Olá Mundo)
Dim MeuStringBuilder As New
StringBuilder("Olá Mundo!") Resultado =>
|
|
Anexa texto no final do
objeto StringBuilder e realiza a formatação. Ex: (Formata a saida na
moeda local)
Dim MeuInt As Integer = 25 Resultado => |
|
Inclui uma string ou objeto
numa posição específica de um objeto StringBuilder atual. Ex:(Inclui a
palavra Carlos entre Jose Macoratti)
Dim MeuStringBuilder As New
StringBuilder("Jose Macoratti") Resultado =>
|
|
Exclui um número específico
de caracteres de um objeto StringBuilder. Ex: (Remove a palavra Jose)
Dim MeuStringBuilder As New
StringBuilder("Jose Macoratti") Resultado =>
|
|
Substitui caracteres em um
objeto StringBuilder atual. Ex: (Substituir todas as ocorrências de !
por ?)
Dim MeuStringBuilder As New StringBuilder("Olá Pessoal !") Resultado => Olá Pessoal ? |
StringBuilder.AppendLine | Inclui uma linha no objeto StringBuilder. |
Propriedade | Definição |
Capacity | Define ou obtém o número máximo de caracteres que pode ser armazenado na memória alocada do objeto StringBuilder. |
Chars | Define ou obtém um conjunto de caracteres a partir de uma posição definida na string contida no StringBuilder. |
Length | Obtém ou define o comprimento da instância do objeto StringBuilder. |
MaxCapacity | Obtém a capacidade máxima da instância do StringBuilder. |
Exemplo:
1- Obtendo a capacidade e o tamanho da string no StringBuilder. Usando as propriedades : Capacity e Length.
Dim
sb As New System.Text.StringBuilder("12345678901234567890")
|
Nota: Você percebeu que no exemplo acima o objeto StringBuilder - sb - foi iniciado com 20 caracteres. Então porque obtivemos como capacidade o valor de 32 ? Como a capacidade inicial de um StringBuilder é de 16 caracteres e você atribuiu 20 caracteres , objeto imediatamente dobra o tamanho para acomodar o string. (16 x 2) . Se você inicia-se com 33 caracteres o tamanho seria aumentando para 64 ( 32 x 2).
2- Acessando e escrevendo caracteres individuais em uma StringBuider . Para fazer isto usamos a propriedade Chars . (começa na posição 0)
A propriedade Chars é muito flexível pois é read-write .(A propriedade Chars da classe String é read-only). Podemos então usar Chars para escrever caracteres em um string. Veja :
|
Para terminar vamos construir uma string usando o objeto StringBuilder. Nossa string deverá conter os números naturais de 0 a 100 e no início da string vamos escrever as palavras : "Lista de números naturais de 1 a 100 : "
- Inicie o Microsoft Visual Studio .Net 7.0 e abra um novo projeto selecionando - New Project.
2- Na janela New Project Selecione em Project Type : Visual Basic Projects e em Templates: Console Application . Vamos dar o nome ao nosso projeto de StringBuilder_1. No final clique em OK. A seguir digite o código abaixo na rotina sub Main.
Module Module1
Sub Main()
Dim sb As New System.Text.StringBuilder(200) Dim n As Integer
For n = 1 To 100 ' Usamos dois métodos Append porque assim é mais rápido sb.Append(n) If n < 100 Then sb.Append(",") 'não inclui uma , depois do número 100 End If Next ' inclui a string no inicio do buffer sb.Insert(0, "Lista de número naturais de 1 a 100 : ")
Console.WriteLine(sb) ' => Lista de número naturais de 1 a 100: 1,2,3,4,5,6,... Console.ReadLine() End Sub End Module |
O resultado da impressão da string montada pelo StringBuilder é :
Este código chega a ser 100 vezes mais rápido do que um código usando a classe String para obter o mesmo resultado.
Por enquanto é só , vamos continuar falando de strings no VB.NET em um outro artigo...
Veja os Destaques e novidades do SUPER DVD VB (sempre atualizado) : clique e confira ! Quer migrar para o VB .NET ? Veja mais sistemas completos para a plataforma .NET no Super DVD .NET , confira... Quer aprender C# ??
Chegou o
Super DVD C# com exclusivo material de
suporte e vídeo aulas com curso básico sobre C# |
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
NET - LINQ a seu dispor - Sintaxe e Operadores - Macoratti ...