問題タブ [plinq]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 理解できない PLINQ 集計例外
私は Igor Ostrovsky による PLINQ PCD09 のプレゼンテーションを見ていて、CULV ラップトップから何が得られるかを試してみたかったのです。
ある時点で奇妙な例外が発生しましたが、それが何を意味するのかわかりません。概要をわかりやすくするために、コードを要約しました。例外を引き起こすのは最後の primes.Sum() であり、範囲を小さくすると (8000)、例外はスローされません。何か案は?
例外 (かなり長い)
System.AggregateException は処理されませんでした Message=1 つ以上のエラーが発生しました。Source=System.Core
StackTrace: System.Linq.Parallel.QueryTaskGroupState.QueryEnd(Boolean userInitiatedDispose) で System.Linq.Parallel.SpoolingTask.SpoolStopAndGo[TInputOutput,TIgnoreKey](QueryTaskGroupState groupState, PartitionedStream2 partitions, SynchronousChannel
1[] チャネル, TaskScheduler taskScheduler) でSystem.Linq.Parallel.DefaultMergeHelper2.System.Linq.Parallel.IMergeHelper<TInputOutput>.Execute() at System.Linq.Parallel.MergeExecutor
1.Execute[TKey](PartitionedStream2 partitions, Boolean ignoreOutput, ParallelMergeOptions options, TaskScheduler taskScheduler, Boolean isOrdered, CancellationState cancellationState, Int32 queryId) at System.Linq.Parallel.PartitionedStreamMerger
1.Receive[TKey](PartitionedStream2 partitionedStream) at System.Linq.Parallel.InlinedAggregationOperator
3.WrapPartitionedStream[TKey](PartitionedStream2 inputStream, IPartitionedStreamRecipient
1受信者、ブール値のpreferStriping、QuerySettings設定)でSystem.Linq.Parallel.UnaryQueryOperator2.UnaryQueryOperatorResults.ChildResultsRecipient.Receive[TKey](PartitionedStream
2 inputStream ) System.Linq.Parallel.WhereQueryOperator で1.WrapPartitionedStream[TKey](PartitionedStream
2 inputStream, IPartitionedStreamRecipient1 recipient, Boolean preferStriping, QuerySettings settings) at System.Linq.Parallel.UnaryQueryOperator
2.UnaryQueryOperatorResults.ChildResultsRecipient.Receive[TKey](PartitionedStream2 inputStream) at System.Linq.Parallel.ScanQueryOperator
1.ScanEnumerableQueryOperatorResults.GivePartitionedStream(IPartitionedStreamRecipient1 recipient) at System.Linq.Parallel.UnaryQueryOperator
2.UnaryQueryOperatorResults.GivePartitionedStream(IPartitionedStreamRecipient 2.UnaryQueryOperatorResults.GivePartitionedQueryStream1 recipient) at System.Linq.Parallel.UnaryQueryOperator
(IPartitionedStreamRecipient1.OpenNum . Linq.Parallel.QueryOpeningEnumerator System.Linq.ParallelEnumerable.Sum(ParallelQuery の 3.Aggregate() System.Linq.Parallel.InlinedAggregationOperatorEnumerator の1.MoveNextCore(Int32& currentElement)1 recipient) at System.Linq.Parallel.QueryOperator
1 mergeOptions, Boolean suppressOrder, Boolean forEffect, QuerySettings querySettings) at System.Linq.Parallel.QueryOpeningEnumerator
1.MoveNext() at System.Linq.Parallel.IntSumAggregationOperator.InternalAggregate(Exception& singularExceptionToThrow) at System.Linq.Parallel.InlinedAggregationOperator
1 source) at ConsoleTest.TestClass.Test() in C:\Users\henrik\Documents\Visual Studio 2010\Projects\CSharp\ConsoleTest\ConsoleTest\TestClass.cs:line 23 at ConsoleTest.Program.Main(String[] args) in C:\Users\henrik\Documents\Visual Studio 2010\Projects\CSharp\ConsoleTest\ConsoleTest\Program.cs:line 20 at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() at System.Threading.ThreadHelper.ThreadStart_Context(Object state) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart() InnerException: System.OverflowException Message=Arithmetic operation resulted in an overflow. Source=System.Core StackTrace: at System.Linq.Parallel.IntSumAggregationOperator.IntSumAggregationOperatorEnumerator
1.MoveNext(TIntermediate& currentElement, Int32& currentKey) at System.Linq.Parallel.StopAndGoSpoolingTask
2.SpoolingWork() で System.Linq.Parallel.SpoolingTaskBase.Work() で System.Linq.Parallel.QueryTask.BaseWork(未使用のオブジェクト) で System.Linq.Parallel.QueryTask.<.cctor>b__0(オブジェクト o) でSystem.Threading.Tasks.Task.InnerInvoke() で System.Threading.Tasks.Task.Execute() InnerException:
.net-4.0 - .AsParallel()と組み合わせたIEnumerableイールドリターン
私は自分の懸念を説明するためにいくつかのコードを書きました:
GetClassMarksは、奇妙なデータソースからのyieldreturnを使用します。GenerateClassReportは基本的にmarks.Sum()/ marks.Count()を実行して、クラスの平均を取得するとします。
私が理解していることから、students.AsParallel()。ForAllは並列foreachです。
私の心配は、GetClassMarksメソッド内で何が起こるかということです。
- 一度だけ列挙されるのでしょうか、それとも何度も列挙されるのでしょうか。
- 列挙はどのような順序で行われますか?
- マークに対して.ToList()を実行して、1回だけヒットするようにする必要がありますか?
c# - リフレクションを介して複数のプロパティを同時に設定する
コードでリフレクションの使用率を最適化しようとしていますが、オブジェクトの複数のプロパティを一度に設定できるかどうか疑問に思っていました。
使用例:
どこ
SetProps拡張メソッドをより効率的なものに置き換えたいのですが、まだ適切なものが見つかりません。前もって感謝します ;)
コメントで提供されているリンクを使用してコードを変更しました。通常の方法でも4倍高速です。問題は、これが限界なのか、それとも改善の余地があるのかということです。
c# - PLINQ での長時間実行タスクのキャンセル
NET 4.0 並列タスク ライブラリを使用して、複数の FTS クエリを処理しようとしています。クエリに時間がかかりすぎる場合は、キャンセルして残りの処理を続行したいと考えています。
このコードは、1 つのクエリがしきい値を超えても停止しません。単一のトランザクションではなく、プロセス全体でキャンセルタスクと制限時間に到達するように呼び出していると思います。期間を非常に短く (300 ミリ秒) に設定すると、すべての検索文字列に対して呼び出されます。
明らかな何かが欠けていると思います..洞察を事前に感謝します。
さらに、これはまだ非常に長いクエリの実行を停止していないようです。これは、実行時間の長いクエリがトリガーされた後にキャンセルする正しい方法ですか?
変更されたコード:
c# - データベースへの一括挿入にplinqForAllを使用しても大丈夫ですか?
私はこのようにやっています:
これは良いですか、これでより多くのパフォーマンスが得られますか?
c# - PLINQ は通常の LINQ よりもパフォーマンスが悪い
驚くべきことに、私が作成した小さなテスト ケースでは、PLINQ を使用してもメリットはありませんでした。実際、通常の LINQ よりもさらに悪かったのです。
テストコードは次のとおりです。
結果?
したがって、LINQ は PLINQ よりも短い時間で同様の操作を完了できます。
私は何を間違っていますか?それとも、私が知らないひねりがありますか?
編集:ストップウォッチを使用するようにコードを更新しましたが、同じ動作が持続しました。JIT の効果を割り引くために、実際に と と の両方を順不同でクリックしてみましbutton1
たbutton2
。得られた時間は異なる可能性がありますが、質的な動作は変わりませんでした。この場合、PLINQ は確かに低速でした。
c# - Let, Select キーワードを使用して LINQ クエリを並列化する
次のLINQクエリがあります
from
untilはのinto meshPlan
リストを選択しますmeshPlan
。これは、並列化が活用できると私が信じている部分です。
上記の操作を並列化するために PLINQ を使用する方法について何か考えはありますか?
次の操作を試しました。
しかし、残念ながらコンパイルできません。
.net - PLINQの更新に失敗しました
私の英語でごめんなさい。だから、これが私がPLINQによってDataTableを更新しようとしている私の質問ですこれが私のコードです
ただし、例外があります:「インデックスが範囲外でした。負ではなく、コレクションのサイズ未満である必要があります。パラメータ名:インデックス」
私を助けてください
plinq - コンパイラは、並列化をサポートするコードを自動的に並列化できますか?
PLinq 拡張ステートメント AsParallel() を手動で追加する代わりに、コンパイラは自動的にこれを理解できなかったのでしょうか? コードがサポートしている場合、特に並列化を望まない例はありますか?
.net-4.0 - 並列クエリのネスト
ネストされたPLINQクエリの実行に問題はありますか?
例えば: