- Use `StringBuilder` for string concatenation in loops: `Dim sb As New StringBuilder(); sb.Append(item)` — `&` operator creates a new string object on every concatenation.
- Use `List(Of T)` with an initial capacity when the size is known: `New List(Of Integer)(expectedCount)` to avoid repeated internal array resizing.
- Use `Async`/`Await` for I/O-bound operations to avoid blocking thread pool threads while waiting for disk or network responses.
- Use LINQ with `AsParallel()` for CPU-bound collection processing: `items.AsParallel().Where(Function(x) x.IsValid).Select(Function(x) x.Value).ToList()`.
- Avoid boxing value types (`Integer`, `Boolean`, `Double`) by using generic collections (`List(Of Integer)`) instead of non-generic ones (`ArrayList`).
- Use `Span(Of T)` and `Memory(Of T)` from `System.Memory` for high-performance buffer slicing without allocations in hot paths.
- Profile with Visual Studio Diagnostic Tools or `dotTrace` before optimizing — measure GC allocations and CPU hotspots with actual data.