2009-06-17 14 views
2

Webサービス、データベース、ファイルルックアップなどの複数のソースからデータを集約し、結果をビューに渡すコントローラアクションがあります。したがって、ページをレンダリングするには、すべてのタスクが完了していなければなりません。現在、これらは順番に実行されていますが、独立しているため、パフォーマンスを向上させるために、それらを並列に実行することを検討しています。ASP.NET MVCと長時間実行するアクション

これを達成するための最良の方法は何でしょうか?タスクごとに新しいスレッドを開始し、すべてのタスクが終了したのでメインスレッドをブロックしますか?スレッドプールからスレッドを使用するか、手動で新しいスレッドを生成する必要がありますか?スレッドプールのスレッドを使用すると、Webサーバーの新しい要求を処理する能力が制限されるため、これは良い考えではないかもしれません。新しいスレッドを手動で生成するのは高価なものになる可能性があるので、一日の終わりにこれらのタスクを並列化するか、または順次実行させるだけでパフォーマンスが大幅に向上しますか?

+1

ページがロードされた後、リクエストが処理されていることをユーザーに伝えながら、AJAXコール(またはコール?)でデータを取得するオプションはありますか?ユーザーが何か起きていることを示すメッセージが表示され、その要求がまもなく返されると、ユーザーはもっと待つことになります... –

+0

AJAXを使用することはできません。これらのタスクから返された結果によってインターフェイスが完全に条件付けられます。 、ページの領域を表示するかどうかを指定します。 –

+0

おそらく、非同期コントローラがあなたを助けてくれるでしょうか?タスクのように聞こえるのはほとんどがI/O境界です。 – bzlm

答えて

1

自分のスレッドを作成したり、スレッドプールスレッドを使用する場合は、スレッドプールのスレッドを使用するといいでしょう。スレッドが不足している場合は、プール内のスレッドを増やすことができるように、常にサーバー設定を調整できます。

+0

@エリック、チップのおかげで、それは私の最初の推測でした。 –

0

最終的な質問に答える唯一の方法は、個別の集計タスクがどれほど複雑であるかわからないので、実際にテストすることです。レスポンシブなUIの錯覚を欲しがっているなら、いつでもロードページを表示して、AJAXでアグリゲーションを開始することができます。スレッド化されていない場合でも、これはユーザーを十分に満足させる可能性があります。

+0

現在、ユーザーは不平を言っていませんが、最適化を探すのは個人的な願いです。 –

関連する問題