LINQ into SortedList
        Posted  
        
            by Chris Simmons
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by Chris Simmons
        
        
        
        Published on 2010-05-24T14:36:17Z
        Indexed on 
            2010/05/24
            14:41 UTC
        
        
        Read the original article
        Hit count: 894
        
I'm a complete LINQ newbie, so I don't know if my LINQ is incorrect for what I need to do or if my expectations of performance are too high.
I've got a SortedList of objects, keyed by int; SortedList as opposed to SortedDictionary because I'll be populating the collection with pre-sorted data. My task is to find either the exact key or, if there is no exact key, the one with the next higher value. If the search is too high for the list (e.g. highest key is 100, but search for 105), return null.
// The structure of this class is unimportant.  Just using
// it as an illustration.
public class CX
{
    public int KEY;
    public DateTime DT;
}
static CX getItem(int i, SortedList<int, CX> list)
{
    var items =
    (from kv in list
     where kv.Key >= i
     select kv.Key);
    if (items.Any())
    {
        return list[items.Min()];
    }
    return null;
}
Given a list of 50,000 records, calling getItem 500 times takes about a second and a half. Calling it 50,000 times takes over 2 minutes. This performance seems very poor. Is my LINQ bad? Am I expecting too much? Should I be rolling my own binary search function?
© Stack Overflow or respective owner