C# - Optimize Performance with Span<T> and Memory<T>
Keyur Ramoliya
Posted on December 5, 2023
C# introduced Span<T>
and Memory<T>
as part of its more recent versions, offering more efficient ways to handle slices of arrays, strings, and other types of memory. These types are particularly useful for high-performance scenarios because they provide a way to work with portions of data without creating additional allocations.
Here's how you can use Span<T>
and Memory<T>
:
Use
Span<T>
for Stack-only Scenarios:
Span<T>
is a stack-only type that can point to a contiguous region of memory, such as an array segment. It's ideal for temporary slices of data in methods or short-lived operations.Use
Memory<T>
for Heap Scenarios:
Memory<T>
is similar toSpan<T>
but can be stored in heap-allocated memory, making it suitable for use in async methods or when you need to pass the data around.
Example:
public static void ProcessArray()
{
int[] numbers = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
// Using Span<T> for a slice of the array
Span<int> slice = numbers.AsSpan(2, 5); // Slice with elements 2, 3, 4, 5, 6
// Modify the slice
for (int i = 0; i < slice.Length; i++)
{
slice[i] *= 2;
}
// Using Memory<T> for asynchronous operations
Memory<int> memory = numbers.AsMemory(2, 5);
ProcessMemoryAsync(memory);
}
public static async Task ProcessMemoryAsync(Memory<int> data)
{
// Do something with the data asynchronously
await Task.Delay(100); // Simulate async work
foreach (var item in data.Span.ToArray())
{
Console.WriteLine(item);
}
}
In this example, Span<T>
is used for a synchronous modification of an array segment, while Memory<T>
is used for asynchronous processing. These types are particularly useful in scenarios involving array manipulations, buffer management, or when working with large datasets.
By using Span<T>
and Memory<T>
, you can significantly reduce memory allocations and improve the performance of your applications, particularly in scenarios with high computational demands or large data processing requirements.
Posted on December 5, 2023
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.