我想使用可能需要一些时间来计算的值对对象列表进行排序。现在我有这样的代码:
public IEnumerable<Foo> SortFoo(IEnumerable<Foo> original)
{
return foos.OrderByDescending(foo => CalculateBar(foo));
}
private int CalculateBar(Foo foo)
{
//some slow process here
}
上面代码的问题是它会为每个项目调用多次计算值,这不好。可能的优化是使用缓存值(可能是字典),但这意味着 SortFoo 必须在每次排序后清除缓存(以避免内存泄漏,我确实希望在每次SortFoo
调用时重新计算该值)。
有没有更干净、更优雅的解决方案来解决这个问题?