Start here. This is the direct spoken answer to practice first.
Why this question matters
Span<T>, Memory<T>, and ArrayPool<T> can avoid copies and repeated buffer allocation in measured hot paths. Their benefit comes with strict lifetime, ownership, exception cleanup, and sensitive-data rules that must remain easy to audit.
Span and Memory help work with slices of data without copying it. ArrayPool helps reuse arrays instead of allocating new large buffers repeatedly. I would use them in hot paths like parsing, serialization, file processing, or networking when profiling shows allocations matter. The risk is lifetime and ownership: pooled arrays must be returned, and data must not be used after the buffer owner has moved on.