📊 Capítulo 04: Loops, Span & Performance
Especialização em Sistemas com C#
🗺️ Zero-Allocation String Slicing: string.Substring vs ReadOnlySpan
flowchart TD
STR["string linha = 'ID:10492,NOME:ServidorWeb,STATUS:ATIVO'"]
subgraph SUBSTRING ["string.Substring() (Legado / Alocação no Heap)"]
S1["linha.Substring(3, 5)\n(Aloca uma NOVA string no Heap com cópia profunda dos 5 caracteres!) 🚨"]
end
subgraph SPAN ["ReadOnlySpan<char> (Moderno / Zero Alocação!)"]
SP1["linha.AsSpan(3, 5)\n(Apenas uma struct ref na Stack apontando para o trecho da string existente!\nZero bytes alocados no Heap! Zero pressão no Garbage Collector!) ⚡"]
end
STR --> SUBSTRING
STR --> SPAN
style STR fill:#ede7f6,stroke:#512da8,stroke-width:2px
style SUBSTRING fill:#ffebee,stroke:#d32f2f,stroke-width:2px
style SPAN fill:#e8f5e9,stroke:#4caf50,stroke-width:2px
🎯 Slide 1: Estruturas Repetitivas e foreach
-
foreach: Consome qualquer coleção que implementeIEnumerableou que declare o métodoGetEnumerator(). - Performance: O compilador C# otimiza o
foreachsobre arrays eList<T>convertendo internamente para um loop indexado com verificação de limites eliminada (Bounds Check Elimination).
🎯 Slide 2: O Que é Span<T>?
- Uma janela direta e contígua sobre qualquer tipo de memória:
- Memória gerenciada no Heap (como
byte[]oustring). - Memória na Stack (via
stackalloc). - Memória nativa não-gerenciada (alocada via C/C++).
- Memória gerenciada no Heap (como
🎯 Slide 3: stackalloc para Buffers Temporários
// Aloca 128 bytes instantaneamente na Stack sem passar pelo Garbage Collector:
Span<byte> buffer = stackalloc byte[128];
int lidos = socket.Receive(buffer);
🔗 Navegação do Capítulo 04
| 📖 Ler Conteúdo Completo | 🧠 Fazer Quiz | 💻 Ver Exemplos | 🧩 Exercícios |
Slide 1 de 1
Atalhos: ← → Navegar • Espaço Avançar • F Tela Cheia • Home Início • End Fim