大量のファイルを処理する(tiffファイルからtiffに変換する)winformを作成しています。すべてのコードをボタンの背後に置いています(btnProcess)。これは良いアイデアですか?それは動作しますが、私はwinformから離れて、このプロセスに完了するまで空白のウィンドウが表示されます。私はバックグラウンドワーカーについて聞いた。バックグラウンドワーカーの目的は何ですか?大量のデータを処理しているときにレスポンシブUIを維持するにはどうすればよいですか?
答えて
ここで必要なのはマルチスレッドです。これは、2つ(またはそれ以上)のスレッドが並行して実行されることを意味します。そのうちの1つは、ウィンドウを描画するUIスレッドです。あなたの場合、UIスレッドでコードを実行しているので、コード実行中にUIレンダリングがブロックされます。
BackgroundWorkerの目的は、新しいスレッドで操作を開始することであり、必要なものです。
また、大量のファイルを扱っているので、複数のファイルを並列に処理できるように、複数のバックグラウンドスレッドを考慮する必要があります。 –
絶対に。しかし、これは主にマルチコアCPU(最近のCPUのほとんどの場合)に役立つことに注意する価値があります。これは、X BackgroundWorkersを作成するのではなく、Parallel Extensionsのようなものを使ってforループをマルチスレッド化することで、より簡単に達成できます。 –
@Raj:File IOについて話を始めるときは注意が必要です。これは最も遅いプロセスであり、複数のファイル操作をマルチスレッド化しても、パフォーマンスの向上は保証されません。 – IAbstract
のBackgroundWorkerクラスは別の、 専用スレッド上で操作を実行でき ことができます。時間がかかる 操作がダウンロードとデータベースのようになりました インターフェイス(UI)が のように見えて、 の実行中に応答が停止している可能性があります。応答性の高いUI が必要で、このような操作に長時間の遅延 が関連付けられている場合、 BackgroundWorkerクラスは という便利なソリューションを提供します。
上記のリンク先のページには、の完全なBackgroundWorkerの例が含まれています。
マルチスレッドのパラダイムが初めての方は、バックグラウンドワーカーを使用することをお勧めします。マルチスレッドプログラミングの抽象概念です。 –
非同期のすべてのサービスメソッドを使用している場合は、タスク。それはパフォーマンスを低下させるかもしれません(大規模なアプリケーションで)? –
これは非常に広い質問です。並行して実行するタスクが多すぎると、ある時点でシステムが過負荷になります。しかし、詳細がなければ、5つのタスクか100かを判断することは不可能です。 –
アプリケーションによって異なります。これが極端に長くない単一用途のアプリケーションであり、唯一の問題は画面がペイントしないことです。それは私のような音ですが、ループにApplication.DoEventsをスローして終了してください。
- 1. 大量のデータを処理するレーキタスクを高速化するにはどうすればよいですか?
- 2. サブスクリプション - 大きなコンテンツとサブスクリプションの量を処理するにはどうすればいいですか?
- 3. 大量のスプレッドシートにスクリプトを最適に維持するにはどうすればよいですか?
- 4. アニメーションを大きくしてそのサイズを維持するにはどうすればよいですか?
- 5. リサイクラービューで大量のアイテムを処理するにはどうすればよいですか? (例:1000sのコメント)
- 6. WPFで大量のテキストを処理/編集するにはどうすればよいですか?
- 7. C++でより大きいデータセットのデータに基づいて計算を処理するコードを作成するにはどうすればよいですか?
- 8. JQueryを使用してページの長いリストに表示される大量のユーザーコメントを処理するにはどうすればよいですか?
- 9. メッセージタイプに基づいて異なる処理を処理するにはどうすればよいですか?
- 10. 大量のデータから異常なデータを特定するにはどうすればよいですか?
- 11. バッチバッチ - 大量のデータを処理する
- 12. Android上でPHP/MySQLバックエンドにデータを送信したり(大量の)大量のデータを取得するにはどうすればよいですか?
- 13. Eloquentを使用して大規模データセットを処理するにはどうすればよいですか?
- 14. 大量のデータを処理するときにflinkログが失われる
- 15. 大きなローカルデータフレームのSparkRデータフレームへの変換を処理するにはどうすればよいですか?
- 16. クエリを実行してそのデータを処理するにはどうすればよいですか?
- 17. MS SQLの大きなテキストファイルをインポート/処理するにはどうすればよいですか?
- 18. レイヤードプロトコルスタックで大きなバッファを処理するにはどうすればよいですか?
- 19. Rubyで大きなファイルを処理するにはどうすればよいですか?
- 20. <textarea>タグで大きなデータレンダリングを処理するにはどうすればよいですか?
- 21. BIツールはモバイルで100GBの大容量データを表示するにはどうすればよいですか?
- 22. 大量の列データを一時テーブルに挿入するにはどうすればよいですか?
- 23. Googleデータストアに大量のデータを挿入するにはどうすればよいですか?
- 24. カスタムIHttpHandlerでポストバックを処理できるようにするにはどうすればよいですか?
- 25. XLSXで大量のデータをJavascriptで解析するにはどうすればよいですか?
- 26. UITableViewControllerが処理できるデータの量はどれくらいですか?
- 27. Nodeのローカルソケットで大量のデータを送信するにはどうすればよいですか?
- 28. 任意の量のリダイレクトURIを処理するにはどうすればよいですか?
- 29. アプリがアクティブでないときに通知を処理するにはどうすればよいですか?
- 30. Webアプリケーション経由で大量の履歴データをページするにはどうすればよいですか?
同様の問題に直面している他のユーザーを支援し、可能な限り最良の回答を引き付けるために、できるだけわかりやすいようにご質問ください。 "winform question"はどちらの目標も達成できないでしょう。 –
良い提案。私は新しいタイトルが好きです、それはより理にかなっています。私はちょうどそれらの派手な言葉や技術的な専門用語を知りませんでした。 –