 VB .NET - StringBuilder :
tratando Strings de modo mais eficiente.
 
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.
| ModuleModule1 
 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 Facebook    Compartilhe no Twitter
 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 ...