0

私は、データ ストレージに MSSQL を使用する Web アプリケーション フレームワークに取り組んでおり、ほとんどは CRUD 操作を行い (ただし、任意の複雑な構造で)、豊富な Silverlight 管理者用の WCF インターフェイスを提供し、MVC3 ディスプレイ (およびユーザーのようないくつかの基本的なフォーム) を備えています。設定など)。

ユーザーフレンドリーな方法で、(それなりに) 複雑なデータ構造を読み込み、表示、編集、保存できるようになりつつあります。

しかし、私は将来を見据えており、自分の能力を拡大したいと考えています (そして、その過程で新しいことを学ぶのも楽しいでしょう...) - だから私は決めました (C に何が来るかを考慮して) #5...) いくつかの並列/非同期の最適化を試みます... 現在、私はまだ TPL と PLinq を学んでさえいないので、そこでもアドバイスをいただければ幸いです。

だから私の質問は、並列処理が役立つ可能性のある分野は何ですか? また、TPL と PLinq はどこで私を助けてくれますか?

私の直感によると、データ構造のブランチを並行してデータベースに保存することができます (これは、最大のパフォーマンスの最適化が期待される場所です)。いくつかの複雑な操作 (ファイルのアップロード、メールの送信など) を実行できます。クライアント上で複雑な SL UI ビューを並行して構築できますか? (ビューに 60 個のデータ バインド フィールドを作成すると、「点滅」が発生する可能性があります...) MVC で部分的なビュー (メニュー、カテゴリ ツリー、検索フォームなど) を一度に作成できますか?

ps: これが「並列処理についてすべて教えてください」スレッドになったら、喜んでコミュニティ wiki にします...

4

2 に答える 2

2

どのような場合でも、asp.net Web アプリケーションは本質的に並列アプリケーションであることに注意してください。要求は並行して処理でき、これはすべて asp.net フレームワークによって管理されます。したがって、次の 2 つのケースがあります。

  1. 多くのユーザーが一度にサイトにアクセスしています。その場合、サーバーの並列処理機能は、いずれにせよおそらく容量いっぱいに使用されています。

  2. 多くのユーザーが一度にサイトにアクセスすることはありません。その場合、サーバーは、適切な高速応答時間で、並列処理なしで応答を処理できる可能性があります。

楽しいかもしれないという理由だけで何かを最適化することを考え始めるとき、または何かをより速くする必要があると考えるときはいつでも、ほぼ確実に時期尚早の最適化の罪を犯しています。おそらく十分に高速なソリューションを少し高速化するよりも、フレームワークの機能を充実させることに労力を費やすほうがよいでしょう (複雑さが大幅に増加します)。

TPL と PLINQ が実際に役立つのはどこかという質問への回答です。私の意見では、これらのテクノロジの主な利点は、長時間実行されるブロッキング プロセスが実際に多く存在するアプリケーション内の場所にあります。たとえば、外部 Web サービスを複数回呼び出す状況がある場合、これらの呼び出しを並行して行うことは大きな利点となります。ローカルデータベースへの書き込み、またはローカルネットワーク上の別のボックスにあるデータベースでさえ、この種の並列化が重要な価値がある限り、長時間実行されるブロックプロセスと見なされるかどうかを強く疑問に思います。

あなたがリストしたほとんどすべての例は、以前は順番に実行していた何かを PC に並行して実行させるというカテゴリに分類されます。サーバー上の CPU の数 - Web サイトに負荷がかかっているときに実際に空いている CPU の数。何かを並列化することは、PC が外部イベントを待って何もせずに座っているときに関連するプロセスにある程度の時間がない限り、必ずしも高速化と同じではありません。

于 2011-03-13T12:58:21.733 に答える
1

最初の質問は、どのビットが遅いと思われるかをユーザー/テスターに​​尋ねることです。何が遅くなっているのかを確実に知る唯一の方法は、dottrace のようなプロファイラーを使用することです。結果は時々驚くべきものです。

何かが見つかった場合、並列処理は答えではないかもしれません。タスクを分割するとオーバーヘッドが発生することを覚えておく必要があります。そのため、タスクが最初からかなり高速である場合、最終的に遅くなる可能性があります。また、複雑さが増すことも考慮する必要があります。たとえば、タスクの半分が成功し、半分が失敗した場合はどうなるでしょうか。(ただし、TPL と PLINQ はこれを隠します)

楽しんでください。しかし、これは 1) 問題を追跡するソリューション、および 2) 時期尚早の最適化の場合ではないかと思います。

于 2011-03-13T11:44:37.537 に答える