計算に時間がかかる可能性のある値を使用して、オブジェクトのリストを並べ替えたいと思います。今のところ私はこのようなコードを持っています:
public IEnumerable<Foo> SortFoo(IEnumerable<Foo> original)
{
return foos.OrderByDescending(foo => CalculateBar(foo));
}
private int CalculateBar(Foo foo)
{
//some slow process here
}
上記のコードの問題は、アイテムごとに値の計算を数回呼び出すことですが、これは良くありません。可能な最適化は、キャッシュされた値(おそらく辞書)を使用することですが、SortFooは各ソート後にキャッシュをクリアする必要があることを意味します(メモリリークを回避するため、SortFoo
呼び出しごとに値を再計算する必要があります)。
この問題に対するよりクリーンでエレガントな解決策はありますか?