私は&分散処理スケールアウトのIEnumerableで動作する式ツリーを非直列化しているシナリオを考えて、スケールアップを自動化したいと思います: この式ツリーの実行時に、 AsParallel()演算子。表現木を並列化する推奨されるメカニズムは何ですか?
これを実行するベストプラクティスは何ですか?
私は&分散処理スケールアウトのIEnumerableで動作する式ツリーを非直列化しているシナリオを考えて、スケールアップを自動化したいと思います: この式ツリーの実行時に、 AsParallel()演算子。表現木を並列化する推奨されるメカニズムは何ですか?
これを実行するベストプラクティスは何ですか?
問題がどこにあるかわかりません。私はあなたが望むと思っています
IEnumerable<string> enumerable = new List<string>();
Expression<Func<IEnumerable<string>, IEnumerable<bool>>> expression = a => a.Select(b => b == true);
自動的に拡大縮小します。つまり、AsParallel()は、別のGetEnumerator()メソッドを実装するクラスを返すだけです。それはまだIEnumerable < T>インターフェイス上で動作します。あなたはなぜ実装しないのですか
Expression<Func<ParallelQuery<TSource>, IEnumerable<bool>>> expression = a => a.Select(b => b == true);
デフォルトでは?次に、次のようなものを用意してください:
void Execute(Expression<Func<ParallelQuery<string>, IEnumerable<bool>>> expression, IEnumerable<string> strings)
{
ParallelQuery<string> parStrings;
if (!typeof (ParallelQuery<string>).IsAssignableFrom(strings.GetType()))
parStrings = strings as ParallelQuery<string>;
else
parStrings = strings.AsParallel();
expression.Compile()(parStrings);
}
ロングストーリー。式はParallelQuery < T>で既定で操作し、IEnumerable < T>をParallelQuery < T>に変換します。それ以外の場合は、ノードのトラバーサル/クエリの再構成が必要です。 (あなたの質問に答えても、とにかくわかりません)
警告のExpression.Compile()は非常に重い方法です。パフォーマンスが必要な場合は、可能な場合は避けてください。