首先在IEnumerable上排序或删除所有需要两者的?

Jas*_*son 1 c# performance coding-style

当IEnumerable需要进行排序和要删除的元素时,是否有以特定顺序执行阶段的优点/缺点?我的表现测试似乎表明它无关紧要.

我所说的简化(有点人为)的例子如下所示:

public IEnumerable<DataItem> GetDataItems(int maximum, IComparer<DataItem> sortOrder)
    {
        IEnumerable<DataItem> result = this.GetDataItems();

        result.Sort(sortOrder);
        result.RemoveAll(item => !item.Display);

        result = result.Take(maximum);  
        return result;
    }
Run Code Online (Sandbox Code Playgroud)

小智 5

如果您的测试表明它无关紧要,那么为什么要担心呢?不要在需要之前进行优化,只有在问题出现时才进行优化.如果您发现性能问题,并且使用了分析器,并且发现该方法是热点,那么您可以更加担心它.

第二个想法,你考虑过使用LINQ吗?这些调用可以替换为调用to,Where并且OrderBy两者都被延迟,然后调用Take,就像你在你的例子中一样.LINQ库应该找到最适合您的方法,如果您的数据大小扩展到需要花费大量时间来处理的程度,您可以通过简单的调用来使用PLINQ AsParallel.


SLa*_*aks 5

你可以在排序之前删除AllAll,这样你就可以减少要排序的元素.