2012-02-27 5 views
0

SL4アプリケーションでは、HttpWebRequestを使用して同じ時間(+ 3秒)で多くのリクエストをサーバーに実行します。 (サーバーが304を返さ - 変更されません)その結果、私は応答の同じカウントを受け取り、すべてのresponsiesが受信されSilverlight:StreamReaderはブラウザのキャッシュではゆっくりと動作します

HttpWebRequest request = (HttpWebRequest) asynchronousResult.AsyncState; 
HttpWebResponse response = (HttpWebResponse) request.EndGetResponse(asynchronousResult) 
using (var stream = new StreamReader(response.GetResponseStream())) 
{ 
    var str = stream.ReadToEnd(); 
    var doc = XDocument.Parse(str); 
} 
  1. ストリームプロセスを開始各応答プログラムについて
  2. (なぜならasynchronusResultの新しいスレッドを作成し、 )。
  3. ストリームからデータを取得しようとすると、stream.ReadToEnd()メソッドが機能するのに多くの時間がかかります。私は今ReadToEnd()の内部に何もしていませんが、ストリームの読み取りが1つのスレッドで実行されるか、ロックが発生しているようです。何か案は?? なぜそれが起こるのですか?すべてが独立したスレッドでカプセル化され、このメソッドを除いて速く動作します。
+0

I/Oは、常にプログラムの遅い部分です。複数のスレッドを使用しても、TCP/IPドライバスタックとネットワークカードは1つしかありません。キャッシュからのものであればディスク。そして、はい、共有リソースへのアクセスをシリアライズするOSコードに組み込まれたロックがあります。 –

答えて

0

おそらく、ブラウザのhttpスタックを使用しています。この場合、特定のサブドメインに同時に接続できる数に制限があります。多くのブラウザでは2つです。

一般的なトリックは、コンテンツを提供するuse multiple sub domainsです。

+0

ありがとう、私は試みたが、それは助けにはなりませんでした。私は問題をローカライズし、ブラウザからの応答がサーバからではなくてもストリームリーダーが遅くなることを発見しました。 –

関連する問題