これは、技術的な "ハウツー"または "最良のアプローチ"の問題です。C#LINQと大規模なデータセットを含む計算
データベースからレコードを取得し、それらを「メモリ内」リストに配置し、そのデータに対して最大値、平均値、およびさらに特定のカスタム統計値などの一連の計算を実行するという現在の要件があります。
私たちがORMとしてNHibernateを使用し、データベースからデータを取得する優れた仕事をしているので、 'メモリ内'リストにデータを取得することは問題ではありません。私が求めているアドバイスは、データの結果のリストに対してどのように計算を行うべきかということです。
理想的には、MaximumValue()、AverageValueUnder100()、MoreComplicatedStatistic()などの各統計についてメソッドを作成したいと思います。もちろん、各メソッドに必要な変数を渡して結果を返すこともあります。このアプローチはまた、単体テストを楽にし、優れたカバレッジを提供します。
計算ごとにLINQクエリを実行するか、可能な限り少数のLINQクエリで各統計メソッドへの呼び出しを多数集約する必要があります。たとえば、AverageValueBelow100というメソッドにデータのリストを渡し、1つのLINQクエリで効果的に実行できるときは、データリスト全体を別のメソッドAverageValueBelow50に渡すことはあまり意味がありません。
パフォーマンスを犠牲にすることなく、高度な粒度と分離を達成するにはどうすればよいですか?
アドバイス...質問は十分に明確ですか?
パフォーマンスを向上させるためにインデックスの利点があるデータベースに対してクエリを実行するのが最適な方法です –
本当ですか?したがって、「メモリー内」を処理するのではなく、データベースを照会する方が良いでしょう。計算のいくつかは非常に複雑なので、これが最良のアプローチであるとは必ずしも思えません。 – Rowen
ほとんどの場合、データベースの方が速い –