高并发访问同一个webservice 问题 怎么提高速度 20C

有个客户接口 接受我推送过去的数据 ,所以我写了个循环进行价格推送。

因为数据量大 所以我写了多线程

foreach (var roomlist in hotelRoomInfoList)
{
// Thread.Sleep(10000);//每个线程间隙10秒
if (roomlist != null && roomlist.Count > 0)
{
//多线程
Thread thread = new Thread(new ParameterizedThreadStart(RoomInfoProcessThread));//创建线程
thread.Start(roomlist); //启动线程
}

}

         private void RoomInfoProcessThread(object obj_roomlist)
    {
                        foreach (var roomInfo in roomInfoList)
            {
                             _service.Request(roomInfo);
                        }
            }


            问题是反应速度 很慢  是不是windows什么地方限制了  
            每秒对外访问的次数有限?

            有没有大神有什么好的解决方法?



            已解决 :

            谢谢大家 

            加上 
            //最大连接数
    httpWebRequest.ServicePoint.ConnectionLimit = int.MaxValue;

            可恶的连接数默认值  限制了!默认同时只能请求2个 改了就好了!!

10个回答


不知道你是否用的C#,如果是的话,看看你用的用的是哪个版本的.net , 有些版本是默认开启webservice 的web代理,第一次连接都会很慢,要关闭这个代理设置,HttpWebRequest.DefaultWebProxy = null; 或者是在配置文件中修改。具体怎么修改你自己去搜一下

2。 采用线程池进行并发处理,不要sleep(10000),那是10秒钟,不慢才怪

Thread.Sleep(10000);//每个线程间隙10秒
这可不是间隙10秒,而是线程阻塞10秒啊,你这么搞能快么。。。汗

windwos也有socket文件句柄限制, 另外资源也是严重限制的, 例如你剩下内存500M, 那么产生的线程数是有限的, 如果满负荷运行, 线程上下文切换厉害, 最终把资源消耗完, 你的机器就卡死了.
用jmeter做压力测试的时候, 能模拟的用户, 也就是线程数也不能无限大的, 否则卡死windows,只能断电重启. 还有一个就是对方的接口也有限度, 太多线程冲击会冲垮对方的系统的, 除非对方系统做了节流阀, 限制请求产生的速度

用多个 service..负装载均衡

liliang119007
民工_ 什么意思? 怎么多用? 再new个?
大约 2 年之前 回复

调用提高速度没用, 要服务端能承受得了. 就算服务端承受得了, 调用端也不能在短时间内产生大量请求线程

在应用程序的config文件中加入以下配置节:

复制代码







复制代码
或者在程序入口加入以下代码:

HttpWebRequest.DefaultWebProxy = null;

如果是.net 4.0 尝试一下一下方法,然后再试试

在配置文件中(.config)中添加配置节:

[html] view plaincopyprint?
<?xml version="1.0"?>











enabled="false"
useDefaultCredentials="false" >













<?xml version="1.0"?>





enabled="false"
useDefaultCredentials="false" >






【问题所在】

.net 4.0 在配置文件中(.config)中添加配置节:

<?xml version="1.0"?>











enabled="false"
useDefaultCredentials="false" >











其他版本,在应用程序的config文件中加入以下配置节






或者在程序入口加入以下代码:
HttpWebRequest.DefaultWebProxy = null;

还有你这种情况建议你用线程池,不需要sleep(10000),那是10秒钟在那里啊

谢谢大家 我已解决 加上这个就解决了!

原来是可恶的连接数限制了 !!!!

//最大连接数
httpWebRequest.ServicePoint.ConnectionLimit = int.MaxValue;

你每个线程都要停留10秒肯定会慢的啊。。然后你可以考虑下并行,百度下并行是怎么用的,推送的时候可以异步进行

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问