2012-02-27 59 views
0

在SL4应用程序中,我通过使用HttpWebRequest在同一时间(+〜3秒)内向服务器执行很多请求(30)。其结果是我收到的答复相同的计数,并开始处理流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. 所有responsies接收(服务器返回304 - 不修改)
  2. 对于每个响应程序创建新的线程(因为asynchronusResult的)。
  3. 当我尝试从流中获取数据时,stream.ReadToEnd()方法工作时需要很长时间。我现在不在ReadToEnd()内部,但似乎流读取在一个线程中执行或发生任何锁定。有任何想法吗?? 为什么会发生?一切都封装在不同的线程中,除了这种方法之外,它的工作很快
+0

I/O始终是程序的缓慢部分。使用多个线程无济于事,您的机器仍然只有一个TCP/IP驱动程序堆栈和一个网卡。或者如果这是磁盘来自缓存。是的,在操作系统代码中嵌入了锁,可以访问这些共享资源。 – 2012-02-27 13:48:38

回答

0

假设您使用浏览器http堆栈,在这种情况下,您的浏览器几乎肯定会限制您可以立即连接到给定子域的连接数 - 在许多浏览器中,这是两个。

一个常见的伎俩,就是use multiple sub domains来服务内容。

+0

谢谢,我试过了,但没有帮助。我本地化的问题,发现只有当响应来自浏览器缓存(不是来自服务器)时,流读取器才会变慢, – 2012-02-29 07:09:21