2010-12-01 26 views
1

ASP.Net Webサービスを使用しています。 .NET 3.5で ASP.NetベースのWebサービスクライアントアプリケーション(クライアントマシン) - -ASP.Net Webサービス応答時間が遅く

アーキテクチャは、.NET 3.5で開発された デスクトップベースのアプリケーションでビジネスロジック層(サーバー上のIIS) SQL 2005データベース - データベースレイヤ(IISと同じか異なるサーバー)

アプリケーションはほぼ開発されており、最初に実装されています。 1日目にショーストッパーの問題に直面しました。 患者のデータベースを30000レコードで読み込みました。患者検索画面の応答時間は20秒以上です。 データベースのインデックスを作成し、不要なコールをすべて削除しました。 a。クライアントからWebサービスへ b。 Webサービスからデータベースへ まだ応答時間は7秒です。これは受け入れられません.3秒未満でダウンしなければなりません。 主な問題は、Webサービスがネットワーク経由でこのようなサイズのデータ​​をクライアントに返す4秒間ということです。

これに対する解決策は何ですか?

+0

jsonと圧縮が役に立ちます。 –

答えて

2

検索結果が大きい場合は、ページング機能をWebサービス呼び出しに追加することを検討できます。

ユーザーは一見して250人(または任意の数> 10人)の患者を見直すことは考えにくいようです。したがって、250をすべて返すメソッドの代わりに、10のセットで返すことができます。あなたのウェブメソッドを少し変更しなければならないでしょう。

これにより、ネットワークのペイロードが減少します。

高価なクエリを頻繁に実行しないように、検索結果をサーバーにキャッシュすることができます。

これはソリューションの一部になる可能性がありますが、他にも多くのオプションがあります。

幸運を祈る!

+0

これは唯一の良い解決策です。それに加えて、本当に必要なものを送るだけで、転送するデータのサイズを縮小することができます。これは、フロントエンドが知っておかなければならないこと(悪いスタイル)をバックエンドが知る必要があるという欠点がありますが、帯域幅の使用を大幅に減らすことができます。 – dbemerlin

+0

これは_a_ solutionとすることができます。しかし、それは_only_良いものだとは思わない。 ;-) – Marijn

1

インデックスがインデックスを使用できることを確認してください。 SQL Serverでテーブルをインデックスする最も簡単な方法は、SQL Serverチューニングウィザードを使用することです。 問題を診断するもう1つの方法は、サービスにPingメソッドを追加することです。これにより、ネットワークの待ち時間を確認することができます。 Cacheオブジェクトを使用して共通レコードをキャッシュすることもできます。 SQL Serverの30000行が海洋全体の水滴未満です。

1

実際にクライアントにとって有用なデータだけを返すようにしてください。 Webサービスでは、大規模なデータセットをデータベースに格納したまま正確に返すのは簡単です。スピードが本当に重要な場合は、クライアントマシンに返される情報の量を、できるだけ多くのことを行い、あなたが取っている何らかのアクションのために直ちに必要な情報だけを減らす必要があります。

作成されているWebサービス呼び出しに固有の情報のみを含むWebサービスを経由して渡されるいくつかのプロキシ/ datacontractオブジェクトを設定できます。簡単な例は、名前、住所、電話番号などを返す代わりに人の名前を返すことだけです。

0

問題が実際にネットワーク経由で送信されたデータ量の場合。データの量を減らす以外にも、いくつかのオプションがあります。)スコティは "物理学の法則を変更する直前に" Capin、私はcannah phyyicsの法則を変更する "と言うでしょう;)

zの速度のデータリンクでyバイトのデータを転送するのにx時間がかかります。

どのようにデータを削減するかは、状況によって大きく異なります。あなたは、データの構成に応じて何かを得るかもしれないし、そうでないかもしれない圧縮を使うことができますが、大部分はXMLに基づいているので、それからかなり良い改善を得るべきです。

一度に少数のレコードを転送することも、遅延ロードを使用して必要なときにのみデータのサブセットをロードすることもできます。

もちろん、3つのフィールドだけが必要なときにテーブル全体を転送すると、データのサイズも大幅に増加する可能性があります。必要なデータのみを転送していることを確認してください。

関連する問題