BlockingCollection - Improves Multithreaded Performance
BlockingCollection<T> helps in producer-consumer scenarios for thread-safe data sharing.
Before (Manual Locking with Poor Performance)
Manually managing thread synchronization with locks leads to complex and inefficient code.
List<int> data = new List<int>();
object lockObj = new object();
void Producer()
{
for (int i = 0; i < 5; i++)
{
lock (lockObj)
{
data.Add(i);
}
}
}
void Consumer()
{
while (true)
{
int item;
lock (lockObj)
{
if (data.Count == 0) continue;
item = data[0];
data.RemoveAt(0);
}
Console.WriteLine($"Consumed {item}");
}
}
After (Efficient Producer-Consumer with BlockingCollection)
Using BlockingCollection<T>, thread synchronization is simpler and more efficient.
using System.Collections.Concurrent;
BlockingCollection<int> queue = new BlockingCollection<int>();
void Producer()
{
for (int i = 0; i < 5; i++)
{
queue.Add(i);
}
queue.CompleteAdding();
}
void Consumer()
{
foreach (var item in queue.GetConsumingEnumerable())
{
Console.WriteLine($"Consumed {item}");
}
}