How to sort a concurrent collection in .NET 4.0 For example I have constructed my ConcurrentBag collection. How can I sort the elements in it?
ConcurrentBag<string> stringCollection;
ConcurrentBag<CustomType> customCollection;
How to sort a concurrent collection in .NET 4.0 For example I have constructed my ConcurrentBag collection. How can I sort the elements in it?
ConcurrentBag<string> stringCollection;
ConcurrentBag<CustomType> customCollection;
To expand on DSW's answer, you can use the OrderBy on an enumerable.
customCollection.OrderBy(cc => cc.FieldToOrderBy);
You can also do it in descending order:
customCollection.OrderByDescending(cc => cc.FieldToOrderBy);
you can use OrderBy
method for sorting
and also try this too..
var result = stringCollection.AsParallel().AsOrdered();
for more information check below link
http://msdn.microsoft.com/en-us/library/dd460719.aspx, you can lean how to do complex sorting using PLINQ
, e.g:
var q2 = orders.AsParallel()
.Where(o => o.OrderDate < DateTime.Parse("07/04/1997"))
.Select(o => o)
.OrderBy(o => o.CustomerID) // Preserve original ordering for Take operation.
.Take(20)
.AsUnordered() // Remove ordering constraint to make join faster.
.Join(
orderDetails.AsParallel(),
ord => ord.OrderID,
od => od.OrderID,
(ord, od) =>
new
{
ID = ord.OrderID,
Customer = ord.CustomerID,
Product = od.ProductID
}
)
.OrderBy(i => i.Product); // Apply new ordering to final result sequence.
.AsParallel()
cut my execution time over 1.7M items in half. Great tip. –
Lynnelle Get a list from the collection, sort the list, like:
ConcurrentBag<string> bag = new ConcurrentBag<string>();
var temp = bag.ToList();
temp.Sort();//you can apply a custom sort delegate here
bag = new ConcurrentBag<string>(temp);
you can either use PLINQ or you can write implement your own parallel sort function like the one in this article http://www.emadomara.com/2011/08/parallel-merge-sort-using-barrier.html
© 2022 - 2024 — McMap. All rights reserved.