How to sort a concurrent collection in .NET 4.0

13,417

Solution 1

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);

Solution 2

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.

Solution 3

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

Share:
13,417

Related videos on Youtube

mitul patel
Author by

mitul patel

Updated on June 04, 2022

Comments

  • mitul patel
    mitul patel almost 2 years

    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;
    
    • alun
      alun almost 13 years
      Do you mean that you want a new sorted collection with all the elements at some point in time or do you want it to be sorted all the time and draw from it in that order or something to that effect?
  • tzup
    tzup almost 13 years
    Man, that's one expensive way to do it!
  • Jalal Said
    Jalal Said almost 13 years
    Yes I think so, I just added an alternative solution, do you think this should be deleted?
  • Berin Loritsch
    Berin Loritsch about 9 years
    OrderBy just sorts a new IEnumerable. The underlying data structure does not change.
  • Kim
    Kim over 8 years
    But the objects remain in the concurrent collection. How can I remove the oldest items?
  • dyslexicanaboko
    dyslexicanaboko over 4 years
    Using the .AsParallel() cut my execution time over 1.7M items in half. Great tip.