2012-03-02 4 views
0

私はasp .netウェブページ(MVC)に10,000の製品を表示しています。メソッド内で複数のサービスを呼び出す。それを効果的に行うには?

これは私が使用している方法です。この方法では、外部Webサービスを20回呼び出す必要があります。これは、Webサービスが一度に500データを提供するため、10000データを取得するために、私はそのサービスを20回呼び出す必要があるからです。

20コールによってページの読み込みが遅くなります。今私はパフォーマンスを向上させる必要があります。 Webサービスは外部的なので変更を加えることはできません。

スレッディングは私が考えたオプションです。ページ番号(サービスはデータのページング)を使用できるので、各サービス呼び出しはほとんど独立しています。

もう1つのオプションは、並列linqを使用しています。

並列linqを使用するか、スレッディングを選択する必要がありますか?

私をここで案内してください。または、これを達成する別の方法を教えてください。

注:このWebページは、一度に多くのユーザーが使用できます。

ページの左側にフィルタがあります。フィルタを構成するには10,000個のデータがすべて必要です。それ以外のページ単位の情報は十分である可能性があります。サーバー上の巨大なオーバーロードのためキャッシングはできません。一度に400-1000のユーザーがserver.webサービスの応答時間を10秒に達することができるので、私たちは何度もヒットすることができます。

すべてのデータを取得するには20回のサービスが必要です。そのヒット。スレッディングは唯一の選択肢ですか?

+0

で並列処理は、あなたを助けにはなりません。それはあなたがすぐに10.000の製品をすべて必要とすることは、非常に狂ったように聞こえる。既に@starskythehutchに言及されているように、あなたはある種のキャッシュメカニズムを実装することになるでしょう。 – ebb

答えて

0

スレッド、並列linqはここでお手伝いしません。

並列Linqは、CPUコア上で多くのCPU作業を共有するためのものであり、同時に20個のWeb要求を行うことを目的としています。これを行うにはスレッドを使用する必要があります。

おそらく、HttpWebRequestの組み込み非同期機能(BeginGetResponseを参照)を使用することをお勧めします。

2

サービスからデータをキャッシュできない場合は、表示する必要があるときに必要なデータを取得するだけです。誰かが1つのWebページで10000の製品をすべて見たいと思っているのは間違いありません。

+0

ここでは、ページの左側にフィルタがあります。そのためには、10,000個のデータをすべてfilter.Otherwise pagewise infoで作成する必要があります。サーバー上での巨大なオーバーロードのためにキャッシュできません。 400-1000人のユーザーがserver.webサービスの応答時間を10秒にすることができるので、私たちは多くの時間それらを打つことができます。 – SNA

+0

あなたは本当にあなたのソリューションを改訂する必要があると思います。なぜアプリケーションが使用するサービスからのデータのローカルコピーを作成する他のプロセスがないのでしょうか。このデータを定期的に更新することができます。キャッシュが何を助けようとしているのかが正確にわかっているときに、「巨大なオーバーロードによってキャッシングができない」と言ったときに、どういう意味なのか分かりません。 – starskythehutch

+0

私は、多くの要件を満たすためにサービスを20回呼び出す必要があります.canot use cache。 – SNA

0

このサービスを非同期に呼び出すことを検討してください。呼び出しWebサービスの遅延の大部分は、同時に実行できるIO操作によって発生します。 Webリクエストは、I/Oバウンドであるため、

しかし、それぞれの要求ごとの10000個のアイテムを得ることが非常にスキャリー何か:)