DOBON.NETプログラミング道掲示板
(現在 過去ログ2 を表示中)
HOME
HELP
新規作成
新着記事
トピック表示
発言ランク
ファイル一覧
検索
過去ログ
[
最新記事及び返信フォームをトピックトップへ
]
[ トピック内全2記事(1-2 表示) ] <<
0
>>
■33485
/ inTopicNo.1)
forループの並列化とUI操作について
▼
■
□投稿者/ ぺんたごん
一般人(19回)-(2016/10/04(Tue) 17:46:03)
環境/言語:[C#、.NET 4.5.x]
分類:[.NET]
ごぶさたしてます。
今回、foreachループ内の処理が時間がかかるもののため、
高速化のためにParallel.ForEachに置き換えようとしています。
ただ、ループごとにProgressイベントが発生するクラス設計になっており、
フォーム側はこれをフックしてプログレスバのValueを足しています。
順序は関係ないので並列化しても問題ない内容なのですが、
Parallel.Forは全ループ終わるまで待機するので、
Invokeしちゃうとデッドロックすると思います。
何か良い方法はございますでしょうか…
引用返信
削除キー/
編集
削除
■33486
/ inTopicNo.2)
Re[1]: forループの並列化とUI操作について
▲
▼
■
□投稿者/ 魔界の仮面弁士
大御所(1049回)-(2016/10/04(Tue) 20:33:51)
■
No33485
に返信(ぺんたごんさんの記事)
> forループの並列化とUI操作について
> 今回、foreachループ内の処理が
> Parallel.ForEachに置き換えようと
> Parallel.Forは全ループ終わるま
for なのか foreach なのか…
> 高速化のためにParallel.ForEachに置き換えようとしています。
データ数が少なく、1 回あたりの処理に時間がかかる場合には、
Parallel.ForEach で高速化するかもしれませんね。
各回の処理時間が短い場合は、逆に遅くなりがちですが。
> フォーム側はこれをフックしてプログレスバのValueを足しています。
Marquee スタイルの ProgressBar では無いのですね。
> Parallel.Forは全ループ終わるまで待機するので、
「時間がかかる処理」を行うのが目的なのですよね?
ならば Parallel.ForEach にしろ foreach にしろ、
それらを UI スレッドで動作させてはマズイと思います。
そもそも UI スレッドを待機させる必要は無く、
時間のかかる処理をワーカースレッドで処理させて、
Value を増やす際にだけ Invoke すれば
良いのではないでしょうか。クラス設計次第ですけど。
引用返信
削除キー/
編集
削除
トピック内ページ移動 / <<
0
>>
このトピックに書きこむ
過去ログには書き込み不可
Mode/
通常管理
表示許可
Pass/
HOME
HELP
新規作成
新着記事
トピック表示
発言ランク
ファイル一覧
検索
過去ログ
-
Child Tree
-